美文网首页
从零创建一个DubboRPC框架

从零创建一个DubboRPC框架

作者: ACtong | 来源:发表于2020-04-19 18:06 被阅读0次

    准备一个消费者和一个提供者两个项目

    一、在消费者项目上的Dubbo配置

    1、在调用者(消费者consumer)的模块上写一个接口

    public interface OrderService {
        void placeOrder(int goodsId, int number);
    }
    

    2、在controller中注入服务接口

    @Reference(version = "${wxshop.orderservice.version}")
    private OrderService orderService;
    
    • wxshop.orderservice.version写在yml文件中,version写1.0.0即可
    • Reference引入的包为:import org.apache.dubbo.config.annotation.Reference;
    <dependency>
        <groupId>org.apache.dubbo</groupId>
        <artifactId>dubbo-spring-boot-starter</artifactId>
        <version>2.7.6</version>
    </dependency>
    

    3、yml配置zookeeper地址

    spring:
      application:
        name: wxshop
    wxshop:
      orderservice:
        version: 1.0.0
    dubbo:
      registry:
        address: zookeeper://127.0.0.1:2181
    

    二、在提供者项目上的部署Dubbo

    1、在新的服务中如何调用的到接口呢
    • 1、发布到中央仓库中,使用maven的方式直接引用(最推荐)
    • 2、在另一个项目中创建一个同名的api(为了简单,这里就这样演示)
    2、在提供者项目做一下配置

    1、写一个同名的api的interface

    public interface OrderService {
        void placeOrder(int goodsId, int number);
    }
    

    2、用一个方法去实现接口

    import org.apache.dubbo.config.annotation.Service;
    
    @Service(version="${wxshop.orderservice.version}")
    public class OrderServiceImpl implements OrderService {
        @Override
        public void placeOrder(int goodsId, int number) {
            System.out.println("id" + goodsId + ", number" + number);
        }
    }
    

    3、在yml文件中配置参数

    spring:
      application:
        name: orderservice
    wxshop:
      orderservice:
        version: 1.0.0
    dubbo:
      scan:
        base-packages: com.tk..wxshop.orderservice(配置为自己的包路径)
      protocol:
        name: dubbo
        port: -1
      registry:
        address: zookeeper://127.0.0.1:2181
    

    三、启动项目

    1、用docker方式连接zookeeper,即可启动成功了

    docker run -d -p 2181:2181 zookeeper

    2、若是出现一些包冲突的问题,需要在pom中引入一些文件

    <dependency>
        <groupId>org.apache.dubbo</groupId>
        <artifactId>dubbo-dependencies-zookeeper</artifactId>
        <version>2.7.6</version>
        <type>pom</type>
        <exclusions>
            <exclusion>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-log4j12</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    

    3、若出现Invalid name="org.apache.dubbo.config.ApplicationConfig#0" contains illegal character类是问题,需要在yml文件中覆盖一个名字(前面已配置)

    四、测试项目

    1、在消费者中写入一个请求接口,调用接口即可

    @RequestMapping("/testRpc")
        public String testRpc() {
            orderService.placeOrder(1, 2);
            return "";
        }
    

    2、也可以部署多份服务提供者,它会自动调用负载均衡

    • 使用终端命令,可以启动多个spring boot项目:mvn spring-boot:run
    参考文档:
    • 1、dubbo-spring-boot-samples的zookeeper的代码

    相关文章

      网友评论

          本文标题:从零创建一个DubboRPC框架

          本文链接:https://www.haomeiwen.com/subject/gqembhtx.html