zl程序教程

您现在的位置是:首页 >  后端

当前栏目

dubbo快速使用demo

dubbo 快速 Demo 使用
2023-09-11 14:17:08 时间

1.简单介绍

Apache Dubbo 是一款高性能、轻量级的开源 Java 服务框架。提供了六大核心能力:面向接口代理的高性能RPC调用,智能容错和负载均衡,服务自动注册和发现,高度可扩展能力,运行期流量调度,可视化的服务治理与运维。

Provider:暴露服务方称之为“服务提供者”。

Consumer:调用远程服务方称之为“服务消费者”。

Registry:服务注册与发现的中心目录服务称之为“服务注册中心”。

Monitor:统计服务的调用次数和调用时间的日志服务称之为“服务监控中心”。

2.dubbo使用demo

首先需要明确该demo项目包含三部分,分别是dubbo-api、dubbo-consumer、dubbo-provider。其中dubbo-api是一个公共服务接口项目,它作为依赖被引入后两个项目。

2.1zookeeper下载使用

ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。

目标是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。

(1)下载zookeeper,解压,进入conf目录下,将zoo_sample.cfg文件重命名为zoo.cfg,并且修改其中dataDir和dataLogDir的值为本地磁盘目录。

http://zookeeper.apache.org/

(2)启动,进入到zookeeper的bin目录下,双击zkServer.cmd。

2.2dubbo-api

创建maven项目dubbo-api

dubbo-demo\dubbo-api\src\main\java\com\sw\api\DemoService.java

package com.sw.api;

public interface DemoService {
    String sayHello(String name);
}

2.3dubbo-provider

创建maven项目dubbo-provider

dubbo-demo\dubbo-provider\pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.4.4</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.sw</groupId>
    <artifactId>provider</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>dubbo-provider</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.5.6</version>
        </dependency>
        <dependency>
            <groupId>com.sw</groupId>
            <artifactId>api</artifactId>
            <version>0.0.1-SNAPSHOT</version>
            <scope>compile</scope>
        </dependency>

        <dependency>
            <groupId>com.101tec</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.10</version>
        </dependency>


    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

dubbo-demo\dubbo-provider\src\main\java\com\sw\provider\service\DemoServiceImpl.java

package com.sw.provider.service;


import com.alibaba.dubbo.rpc.RpcContext;
import com.sw.api.DemoService;

import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * @program: dubbo-demo
 * @description:
 * @author: southwind0
 * @create: 2021-03-30 16:16
 **/

public class DemoServiceImpl implements DemoService {

    @Override
    public String sayHello(String name) {
        System.out.println("[" + new SimpleDateFormat("HH:mm:ss").format(new Date()) + "] Hello " + name + ", " +
                "request from consumer: " + RpcContext.getContext().getRemoteAddress());
        return "hello "+name;
    }
}

dubbo-demo\dubbo-provider\src\main\resources\dubbo-provider.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
   http://www.springframework.org/schema/beans/spring-beans.xsd
   http://code.alibabatech.com/schema/dubbo
   http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
    <!--定义了提供方应用信息-->
    <dubbo:application name="demo-provider" owner="wly" organization="dubbox"/>
    <!--使用 zookeeper 注册中心暴露服务,注意先开启 zookeeper-->
    <dubbo:registry address="zookeeper://localhost:2181"/>
    <!-- 用dubbo协议在20880端口暴露服务 -->
    <dubbo:protocol name="dubbo" port="20880" />
    <!--使用 dubbo 协议实现定义好的 api.PermissionService 接口-->
    <dubbo:service interface="com.sw.api.DemoService" ref="demoService" protocol="dubbo" />
    <!--具体实现该接口的 bean-->
    <bean id="demoService" class="com.sw.provider.service.DemoServiceImpl"/>
</beans>

dubbo-demo\dubbo-provider\src\main\java\com\sw\provider\Provider.java

package com.sw.provider;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import java.io.IOException;

/**
 * @program: dubbo-demo
 * @description:
 * @author: southwind0
 * @create: 2021-03-30 17:31
 **/
public class Provider {
    public static void main(String[] args) throws IOException {
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("dubbo-provider.xml");
        context.start();
        System.out.println("dubbo服务提供端已启动....");
        try {
            System.in.read(); // 按任意键退出
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
运行Provider.java,启动服务提供方
 

2.4dubbo-consumer

创建maven项目dubbo-consumer

dubbo-demo\dubbo-consumer\pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.4.4</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.sw</groupId>
    <artifactId>consumer</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>dubbo-consumer</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>


        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.5.6</version>
        </dependency>
        <dependency>
            <groupId>com.sw</groupId>
            <artifactId>api</artifactId>
            <version>0.0.1-SNAPSHOT</version>
            <scope>compile</scope>
        </dependency>

        <dependency>
            <groupId>com.101tec</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.10</version>
        </dependency>


    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

dubbo-demo\dubbo-consumer\src\main\resources\dubbo-consumer.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
   http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">

    <dubbo:application name="demo-consumer" owner="wly" organization="dubbox"/>
    <!--向 zookeeper 订阅 provider 的地址,由 zookeeper 定时推送-->
    <dubbo:registry address="zookeeper://localhost:2181"/>
    <!--使用 dubbo 协议调用定义好的接口-->
    <dubbo:reference id="demoService" interface="com.sw.api.DemoService"/>
</beans>

dubbo-demo\dubbo-consumer\src\main\java\com\sw\consumer\Consumer.java

package com.sw.consumer;

import com.sw.api.DemoService;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import java.io.IOException;

/**
 * @program: dubbo-demo
 * @description:
 * @author: southwind0
 * @create: 2021-03-30 17:34
 **/
public class Consumer {
    public static void main(String[] args) throws IOException {
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext( "dubbo-consumer.xml" );
        context.start();
        System.out.println("dubbo服务消费端已启动...");
        DemoService demoService = (DemoService)context.getBean( "demoService" );// 获取远程服务代理
        String hello = demoService.sayHello( "world" );//执行远程方法
        System.out.println(hello);//显示调用结果
        try {
            System.in.read(); // 按任意键退出
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
运行Consumer.java,启动服务消费方,成功调用如下所示: