从零创建一个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;
-
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的代码