项目SpringBoot工程整合Dubbo框架,实现RPC远程调用
一、业务需求描述
1.1 开发白名单功能
管理员在后台Web管理端更新白名单,车机通过调用后端接口获取最新白名单
1.2 架构描述
项目中有一个微服务AEP,一个Common包子POM服务。另一个CommonProvider,其中AEP提供接口供车机接入,Common包是AEP和CommonProvider的公共依赖,如图所示
CommonProvider提供接口给Web接入
1.3 为什么需要Dubbo来远程调用 ?
因为AEP中没有ORM层,因此,需要调用到CommonProvider中的服务实现方法,实现获取白名单功能。
二、业务功能实现
使用dubbo组件,微服务之间的调用是通过RPC实现的,只需要把provider端的服务接口提供出来,consumer端即可以通过RPC的方式直接调用服务,从而实现不同微服务之间服务的调用。
具体使用示例如下:(使用的示例是在使用SpringBoot搭建工程的基础上实现的)
定义provider和consumer模块都需要使用的服务接口
(1)在Common中,引入Dubbo 的POM文件
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.7</version>
</dependency>
(2)在CommonProvider 和AEP 中,分别引入Dubbo相关的配置
2.1 AEP的Dubbo 配置
# Dubbo Config properties
dubbo.application.name=ids-aep-consumer
dubbo.scan.base-packages=包的根路径
# RegistryConfig Bean
dubbo.registry.id=ids-aep-consumer
dubbo.registry.protocol=${DUBBO_RG_PROTOCOL:zookeeper}
dubbo.registry.address=${DUBBO_REGISTRY_ADDRESS:zookeeper://IP地址:端口号?backup=IP地址:端口号,IP地址:端口号}
dubbo.registry.group=ids
dubbo.consumer.retries=-1
dubbo.consumer.check=false
dubbo.consumer.timeout=180000
dubbo.application.qosEnable=false
# 暴露服务方式
dubbo.protocol.name=dubbo
# 暴露服务端口
dubbo.protocol.port=${DUBBO_PORT:20880}
2.2 CommonProvider 的Dubbo 配置
# Dubbo Config properties
dubbo.application.name=ids-common-provider
dubbo.scan.base-packages=包的根路径
# RegistryConfig Bean
dubbo.registry.id=ids-common-provider
dubbo.registry.protocol=${DUBBO_RG_PROTOCOL:zookeeper}
dubbo.registry.address=${DUBBO_REGISTRY_ADDRESS:zookeeper://IP地址:端口号?backup=IP地址:端口号,IP地址:端口号}
dubbo.registry.group=ids
dubbo.consumer.retries=-1
dubbo.consumer.check=false
dubbo.consumer.timeout=180000
dubbo.application.qosEnable=false
# 暴露服务方式
dubbo.protocol.name=dubbo
# 暴露服务端口
dubbo.protocol.port=${DUBBO_PORT:20880}
(3)定义DubboVersionConf,dubbo服务注册版本设置
/**
* dubbo服务注册版本设置
**/
public class DubboVersionConf {
public static final String DUBBO_REGISTRY_SERVICE_VERSION = "1.0.0";
}
(4)在AEP的入口Controller中,引入@DubboReference 的注解
因为AEP是Dubbo微服务中的消费者,因此要用DubboReference
在consumer端通过RPC的方式调用服务
public class IdsController {
@DubboReference(version = DubboVersionConf.DUBBO_REGISTRY_SERVICE_VERSION)
private WhiteListService whiteListService;
//省略其他代码
}
注意:private 后面不能跟final 。不能使用Lombok的@AllArgsConstructor注解
以下是错误使用
@AllArgsConstructor
public class IdsController {
@DubboReference(version = DubboVersionConf.DUBBO_REGISTRY_SERVICE_VERSION)
private final WhiteListService whiteListService;
//省略其他代码
}
(6)同理,在CommonProvider 的入口Controller中,引入@DubboReference 的注解
因为CommonProvider 也是Dubbo微服务中的消费者,因此要用DubboReference
在provider端实现服务接口的逻辑
public class WhiteListController {
@DubboReference(version = DubboVersionConf.DUBBO_REGISTRY_SERVICE_VERSION)
private WhiteListService whiteListService;
}
(7)最后是实现类 WhiteListServiceImpl
@DubboService(version = "1.0.0")
public class WhiteListServiceImpl extends ServiceImpl<WhiteListDao, WhiteList> implements WhiteListService {
//省略业务逻辑
}
注意,这里用的是@DubboService
三、可能出现的报错
3.1 No registry config found
Caused by: java.lang.IllegalStateException: No registry config found or it's not a valid config! The registry config is: <dubbo:registry />
出现这个错误的原因是
没有引入Dubbo相关的配置,参考以下加入到Properties中即可
# Dubbo Config properties
dubbo.application.name=svw-cdi-ids-aep
dubbo.scan.base-packages=com.desaysv.tsp.logic.gate
# RegistryConfig Bean
dubbo.registry.id=svw-cdi-ids-aep
dubbo.registry.protocol=${DUBBO_RG_PROTOCOL:zookeeper}
dubbo.registry.address=${DUBBO_REGISTRY_ADDRESS:zookeeper://IP:端口?backup=IP:端口,IP:端口}
dubbo.registry.group=svw-cdi-ids
dubbo.consumer.retries=-1
dubbo.consumer.check=false
dubbo.consumer.timeout=180000
dubbo.application.qosEnable=false
# 暴露服务方式
dubbo.protocol.name=dubbo
# 暴露服务端口
dubbo.protocol.port=${DUBBO_PORT:20880}
3.2 Parameter 1 of constructor required a bean of type
Parameter 1 of constructor in IdsController required a bean of type WhiteListService’ that could not be found.
参考前面的注意事项:private 后面不能跟final 。不能使用Lombok的@AllArgsConstructor注解,优化后,如下代码
public class IdsController {
@DubboReference(version = DubboVersionConf.DUBBO_REGISTRY_SERVICE_VERSION)
private WhiteListService whiteListService;
//省略其他代码
}
3.3 No provider available from registry for service WhiteListService:1.0.0 ,please check status of providers(disabled, not registered or in blacklist).
原因是因为,注册dubbo服务到Zookeeper中失败,服务的消费者以及生产者,参考上述yml格式的Dubbo配置重新配置好Dubbo服务的消费者以及生产者
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhfjicaj
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01