从零创建一个DubboRPC框架

2020-04-19  本文已影响0人  ACtong

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

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

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

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

2、在controller中注入服务接口

@Reference(version = "${wxshop.orderservice.version}")
private OrderService orderService;
<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、在新的服务中如何调用的到接口呢
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、也可以部署多份服务提供者,它会自动调用负载均衡

参考文档:
上一篇下一篇

猜你喜欢

热点阅读