工程需要使用rpc,比较了下决定使用dubbo的。所以做了些尝试,记下了对应的配置过程。
rpc需要2个服务:consumer和provider
其中需要有一个中间父类包作为媒介来存放接口类以及pojo对象供consumer和provider这2者使用。
Registry看了下网上使用的最多的是zookeeper,我这边环境未配置zookeeper,所以决定先使用redis试试,但是redis的Registry查看了下源码,又是基于jedis的jedispool,所以项目原本使用lettuce-core的都得换成jedis。
redis的配置我上一篇文章已写过,这边就不多做阐述了。
PS:如果redis没配可以使用multicast(生产不建议,测试环境可尝试,不需要单独安装东西,并且不能跨路由)
dubbo.registry.address= multicast://224.5.6.7:1234?unicast=false
注意同一台机器既做consumer又做provider时需要把unicast=false加上,否则会找不到,而且起好服务之后注册会有延迟。
好的,废话少说,以下开始配置
provider(被调用方):
增加application.yml的配置
增加redis以及dubbo配置
对应使用父类包的接口要暴露出来,让dubbo能扫描到
spring.scan.base-packages: com.xxx.xxx.rpc
增加jedis线程池配置
spring:
redis:
database: 0
host: XX.XX.XX.XX
port: 6379
password:
timeout: 30000
jedis:
pool:
max-idle: 80
#max-wait: -1ms
min-idle: 20
max-active: 100
data:
redis:
repositories:
enabled: false
dubbo:
application:
id: XXX
name: XXX
version: 1.0.0
registry:
id: dubbo-redis
address: redis://XX.XX.XX.XX:6379
protocol:
id: dubbo
name: dubbo
port: 20880
scan:
base-packages: com.xxx.xxx.rpc
#aop:
#proxy-target-class: true
增加log4j.properties的配置
启动时候会报警告,不管也行,但看着难过就加一下对应配置文件
#log4j.rootLogger=info,console
log4j.rootLogger=DEBUG, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
增加pom.xml依赖
ps: 如果rpc报错找不到可能需要增加aop对应包和配置。我这里没有报所以注释掉了
<!-- dubbo redis 依赖-->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-registry-redis</artifactId>
<version>2.7.8</version>
</dependency>
<!-- dubbo 依赖-->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.8</version>
</dependency>
<!-- redis 依赖-->
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-redis</artifactId>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
<!-- <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency> -->
启动类增加dubbo注解
@EnableDubbo
增加处理类RpcTestServiceImpl.java
需要引用接口,并且注入注解,retries设置为0次是为了失败也不重复调用
@Component
@DubboService(retries = 0)
public class RpcTestServiceImpl implements RpcTestService{
//...
}
consumer(调用方):
增加application.yml的配置
spring:
redis:
database: 0
host: XX.XX.XX.XX
port: 6379
password:
timeout: 30000
jedis:
pool:
max-idle: 80
#max-wait: -1ms
min-idle: 20
max-active: 100
data:
redis:
repositories:
enabled: false
dubbo:
application:
id: XXX
name: XXX
version: 1.0.0
registry:
id: dubbo-redis
address: redis://XX.XX.XX.XX:6379
protocol:
id: dubbo
name: dubbo
port: 20880
增加log4j.properties的配置
#log4j.rootLogger=info,console
log4j.rootLogger=DEBUG, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
增加pom.xml依赖
<!-- dubbo redis 依赖-->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-registry-redis</artifactId>
<version>2.7.8</version>
</dependency>
<!-- dubbo 依赖-->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.8</version>
</dependency>
<!-- redis 依赖-->
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-redis</artifactId>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
增加调用类RpcTestToXXXServiceImpl.java
check = false属性是为了启动服务时候如果对应provider未启动,不会报错起不了服务
@DubboReference(check = false, retries = 0)
RpcTestService rpcTestService;