当前位置: 首页 > news >正文

Spring Boot 整合 Dubbo3 + Nacos 2.4.0【进阶】+ 踩坑记录

上一篇文章中,Spring Boot 整合 Dubbo3 + Nacos 2.4.0 进行了简单的集成使用,此文简单进阶并记录踩坑日常;

  1. Nacos 2.4.0 增加鉴权的配置
  2. Nacos 2.4.0 配置 MySQL
  3. Nacos2.4.0 的热更新
  4. Dubbo3 自动负载
  5. Dubbo3 的重试和超时机制
  6. 踩坑记录

一、Nacos 2.4.0 增加鉴权的配置

image.png

1.1、修改nacos的配置文件application.properties
cd ../nacos/conf
vim application.properties

image.png

1.2、启动报错

image.png

1.3、增加账号和用户名的配置

在dubbo3-provider项目的application.yaml文件中增加username和password的配置
image.png
在 nacos的dubbo3-provider配置中增加username和password的参数
image.png

1.4、启动成功

image.png

1.5、consumer 进行同样修改,启动成功

image.png

二、Nacos 2.4.0 配置 MySQL

nacos2.4.0默认使用内置的 Derby数据库,实际使用中更多会使用 MySQL 数据库;
image.png
重启后,启动成功!

三、Nacos2.4.0 的热更新

@NacosValue(value = "${dubboParams}", autoRefreshed = true)
private String dubboParams;配置文件中 增加 nacos.config.autoRefresh = true
详细可看源码中

配置生效
nacos配置热更新.gif

四、Dubbo3 自动负载

dubbo负载.gif

新增模块 dubbo3-provider2

模块内容和dubbo3-provider一致,只是修改了部分配置,此处说明修改部分,全部源码可在文末查看。

1、新增 nacos 配置
server:port: 5657dubbo:application:id: tyron-dubbo3-providername: tyron-dubbo3-providerserialize-check-status: WARNprotocol:id: dubboname: dubbohost: 127.0.0.1port: 7789serialization: hessian2registry:address: nacos://${nacos.config.server-addr}parameters.namespace: ${nacos.config.namespace}parameters.username: ${nacos.config.username}parameters.password: ${nacos.config.password}dubboParams: tyron-dubbo3-provider2
2、修改 application.yaml
nacos:config:# 指定命名空间namespace: 0f0809bb-4b47-****-1e7deb1d7ad2#配置服务地址server-addr: ******:8848username: nacospassword: nacos#data-ids 为新增加的data-iddata-ids: dubbo3-provider2#配置类型type: yaml#是否启动刷新配置autoRefresh: true#运行时启用bootstrap:enable: true
3、nacos 服务列表中实例数2

image.png

五、Dubbo3 的重试和超时机制

// 生产者代码 dubbo3-provider 
@DubboService(version = "1.0.0")
public class DemoServiceImpl implements DemoService {@NacosValue(value = "${dubboParams}", autoRefreshed = true)private String dubboParams;private AtomicLong atomicLong = new AtomicLong(0);/*** 第一次调用时,睡眠时间为1秒,第二次调用时为900毫秒*/@Overridepublic String getString() {long l = atomicLong.incrementAndGet();System.out.println("atomicLong.incrementAndGet():" + l);try {Thread.sleep(1000 - (100 * l));} catch (Exception e) {e.printStackTrace();}return dubboParams;}
}// 消费者代码,dubbo3-consumer 增加超时时间和重试次数
@RestController
public class DemoConsumer {// 引用远程服务,超时时间1000ms,重试次数1次@DubboReference(version = "1.0.0", timeout = 1000, retries = 1)private DemoService demoService;@GetMapping("/tyron-test")public String tyronTest() {return demoService.getString();}
}

接口调用成功,日志打印:
image.png

六、踩坑记录

由于nacos在服务器中部署,搭建好了,启动报错。

1、防火墙添加端口
java.lang.RuntimeException: Can not create registry service-discovery-registry://*******:8848/org.apache.dubbo.registry.RegistryService?application=tyron-dubbo3-provider&dubbo=2.0.2&executor-management-mode=isolation&file-cache=true&interface=org.apache.dubbo.registry.RegistryService&namespace=0f0809bb-4b47-4458-aaa4-1eeb1d7ad2&pid=13008&register=false&registry=nacos&release=3.2.9&serialize.check.status=WARNat org.apache.dubbo.registry.support.AbstractRegistryFactory.getRegistry(AbstractRegistryFactory.java:105) ~[dubbo-3.2.9.jar:3.2.9]at org.apache.dubbo.registry.RegistryFactoryWrapper.getRegistry(RegistryFactoryWrapper.java:33) ~[dubbo-3.2.9.jar:3.2.9]at org.apache.dubbo.registry.RegistryFactory$Adaptive.getRegistry(RegistryFactory$Adaptive.java) ~[dubbo-3.2.9.jar:3.2.9]at org.apache.dubbo.registry.integration.RegistryProtocol.getRegistry(RegistryProtocol.java:487) ~[dubbo-3.2.9.jar:3.2.9]at org.apache.dubbo.registry.integration.RegistryProtocol.export(RegistryProtocol.java:294) ~[dubbo-3.2.9.jar:3.2.9]at org.apache.dubbo.rpc.protocol.ProtocolSecurityWrapper.export(ProtocolSecurityWrapper.java:84) ~[dubbo-3.2.9.jar:3.2.9]at org.apache.dubbo.qos.protocol.QosProtocolWrapper.export(QosProtocolWrapper.java:79) ~[dubbo-3.2.9.jar:3.2.9]at org.apache.dubbo.rpc.protocol.ProtocolListenerWrapper.export(ProtocolListenerWrapper.java:66) ~[dubbo-3.2.9.jar:3.2.9]at org.apache.dubbo.rpc.cluster.filter.ProtocolFilterWrapper.export(ProtocolFilterWrapper.java:58) ~[dubbo-3.2.9.jar:3.2.9]at org.apache.dubbo.rpc.protocol.ProtocolSerializationWrapper.export(ProtocolSerializationWrapper.java:50) ~[dubbo-3.2.9.jar:3.2.9]at org.apache.dubbo.rpc.protocol.InvokerCountWrapper.export(InvokerCountWrapper.java:42) ~[dubbo-3.2.9.jar:3.2.9]at org.apache.dubbo.rpc.Protocol$Adaptive.export(Protocol$Adaptive.java) ~[dubbo-3.2.9.jar:3.2.9]at org.apache.dubbo.config.ServiceConfig.doExportUrl(ServiceConfig.java:944) ~[dubbo-3.2.9.jar:3.2.9]

image.png
467e0d84f190e35ef4fad9342f06825b.png
看了网上教程,是防火墙端口为开放,需要配置三个端口地址:9848、9849、7848
nacos2.X版本无法注册、注册失败的几个原因以及解决方案(踩坑避雷!)_nacos开启权限校验后无法注册-CSDN博客
image.png
部署手册概览
image.png
image.png

2、数据库添加用户数据

仔细比较 2.4 版本的初始化MySQL脚本和 2.3 版本的初始化 MySQL脚本,2.3多了两句用户相关的SQL;
https://github.com/alibaba/nacos/blob/2.3.0/config/src/main/resources/META-INF/nacos-db.sql
https://github.com/alibaba/nacos/blob/2.4.0/config/src/main/resources/META-INF/mysql-schema.sql

INSERT INTO users (username, password, enabled) VALUES ('nacos', '$2a$10$EuWPZHzz32dJN7jexM34MOeYirDdFAZm2kuWj7VEOJhhZkDrxfvUu', TRUE);
INSERT INTO roles (username, role) VALUES ('nacos', 'ROLE_ADMIN');

image.png

七、参考

Dubbo入门项目搭建【Dubbo3.2.9、Nacos2.3.0、SpringBoot 2.7.17、Dubbo-Admin 0.6.0】_哔哩哔哩_bilibili

http://www.lryc.cn/news/417403.html

相关文章:

  • 浙江省食品安全管理员题库及答案
  • C++ 几何算法 - 求两条直线交点
  • Linux操作系统简介
  • 【Python机器学习】回归——缩减系数来“理解”数据
  • 组件设计原则
  • 简单搭建vue项目
  • ctfhub Bypass disable_function
  • 【Qt】探索Qt网络编程:构建高效通信应用
  • 【Android Studio】原生应用部署第三方插件(探针)
  • 嵌入式学习之路 15(C语言基础学习——指针操作一维字符型数组)
  • C++ STL专题 list的底层实现
  • 【JavaEE】线程池
  • lvs实战项目-dr模式实现
  • JSONP跨域
  • Linux--shell脚本语言—/—终章
  • 免费代理池是什么,如何使用代理IP进行网络爬虫?
  • CAN直接网络管理(20240805)
  • HTML5+CSS3笔记(Xmind格式):第二天
  • 视频压缩文件太大了怎么缩小?6个视频压缩技巧,速度收藏起来!
  • Python接口自动化测试数据提取分析:Jmespath
  • 特种设备作业叉车司机题库及答案
  • Linux 操作系统速通
  • IIS漏洞大全(附修复方法)
  • HarmonyOS笔记3:从网络数据接口API获取数据
  • Mac 下生成core dump
  • 详解Xilinx FPGA高速串行收发器GTX/GTP(1)--SerDes和GTX的关系
  • golang实现Digest认证鉴权接口
  • 机房托管服务器说明
  • CookieMaker工作室合作开发C++项目十一:拟态病毒
  • 57、PHP 实现 从扑克牌中随机抽取5张牌,判断是不是一个顺子