当前位置: 首页 > 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

相关文章:

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

上一篇文章中,Spring Boot 整合 Dubbo3 Nacos 2.4.0 进行了简单的集成使用,此文简单进阶并记录踩坑日常; Nacos 2.4.0 增加鉴权的配置Nacos 2.4.0 配置 MySQLNacos2.4.0 的热更新Dubbo3 自动负载Dubbo3 的重试和超时机制踩坑记录 一、Nacos…...

浙江省食品安全管理员题库及答案

1、《中华人民国食品安全法》从(C)起施行。 A.2009年1月1日 B.2009年5月1日 C.2009年6月1日 D.2009年10月1日 2、《中华人民国食品安全法》包括 (D). A.九章共一百零一条 B.十章共一百零一条 C.九章共一百零四条 D.十章共一百零…...

C++ 几何算法 - 求两条直线交点

一:算法介绍 1. 首先定义两条直线方程: 2. 解方程,求出x, y坐标 3. 如果x分母的行列式等于0, 说明两条直线平行或方向相反 4. 如果x,y分母的行列式都等于0,说明两条线重叠 二:代码实现: #include <cmath> #include <iostream>class Point2D { public:doubl…...

Linux操作系统简介

今天给伙伴们分享一下Linux 操作系统简介&#xff0c;希望看了有所收获。 我是公众号「想吃西红柿」「云原生运维实战派」作者&#xff0c;对云原生运维感兴趣&#xff0c;也保持时刻学习&#xff0c;后续会分享工作中用到的运维技术&#xff0c;在运维的路上得到支持和共同进步…...

【Python机器学习】回归——缩减系数来“理解”数据

如果数据特征比样本点还多&#xff0c;是不可以使用线性回归的&#xff0c;因为在计算的时候会出错。 如果特征比样本点还多&#xff08;n>m&#xff09;&#xff0c;也就是说输入数据的矩阵x不是满秩矩阵。非满秩矩阵在求逆时会出问题。 为了解决上述问题&#xff0c;可以…...

组件设计原则

state数据结构设计 用数据描述所有内容数据要结构化&#xff0c;易于程序操作&#xff08;遍历、查找&#xff09;数据要可扩展&#xff0c;以便增加新的功能 组件设计组件通讯 从功能上拆分层次尽量让组件原子化容器组件&#xff08;只管理数据&#xff09;& UI组件&am…...

简单搭建vue项目

1.先安装node.js和vite&#xff0c;具体参考&#xff1a; 2.管理员身份运行cmd&#xff0c;跳转到node安装目录&#xff1a; 输入&#xff1a; npm create vitelatest 输入项目名称&#xff0c;选择vue和JavaScript 2.VisualStudioCode打开(可能需要管理员权限)创建的文件夹,点…...

ctfhub Bypass disable_function

LD_PRELOAD url 蚁剑连接 选择插件 点击开始 查看到此文件名编辑连接拼接到url后面重新连接 点击开启终端 在终端执行命令 ls / /readfile ShellShock url CTFHub 环境实例 | 提示信息 蚁剑连接 写入shell.php <?phpeval($_REQUEST[ant]);putenv("PHP_test() { :…...

【Qt】探索Qt网络编程:构建高效通信应用

文章目录 前言&#xff1a;1. Qt 网络编程介绍1.1 什么是网络编程&#xff1f;1.2 Qt的模块 2. UDP Socket2.1 核心 API 概述2.2 写一个带有界面的 Udp 回显服务器2.3 写一个带有界面的 Udp 客户端 3. TCP Socket3.1 核心 API 概述3.2 代码&#xff1a; 4. HTTP Client4.1 核心…...

【Android Studio】原生应用部署第三方插件(探针)

一、本地引入包流程 &#xff08;一&#xff09;本地引入包内容 &#xff08;二&#xff09;本地引入包操作步骤 将 【probe-android-sdk】目录里面所有的aar包复制到嵌码项目工程&#xff08;App级别&#xff09;的 libs 目录下 二、添加插件 &#xff08;一&#xff09;…...

嵌入式学习之路 15(C语言基础学习——指针操作一维字符型数组)

字符型数组的定义和初始化 char s[] "hello";&#xff1a;在栈上开辟空间并初始化。const char *p "hello";&#xff1a;指针 p 指向字符串常量区的 "hello"&#xff0c;只能读取不能修改。 指针变量的类型确定 指针变量的类型由其所指向的数据…...

C++ STL专题 list的底层实现

目录 1.模拟实现list 2.节点模板讲解 3.迭代器模板讲解 3.1为什么template 有三个类型参数 (1).class T (2).class ref (3).class ptr 3.2 *重载 3.3 ->重载 3.4 前置和后置的重载 3.5 前置--和--后置的重载 3.6 和!的重载 4. list模板讲解 4.1 begin()函数 …...

【JavaEE】线程池

目录 前言 什么是线程池 线程池的优点 ThreadPollExecutor中的构造方法 corePoolSize && maximumPoolSize keepAliveTime && unit workQueue threadFactory 如何在java中使用线程池 1.创建线程池对象 2.调用submit添加任务 3.调用shutdown关闭线程池…...

lvs实战项目-dr模式实现

一、环境准备 主机名IP地址router eth0&#xff1a;172.25.254.100 eth1&#xff1a;192.168.0.100 clienteth0&#xff1a;172.25.254.200lvseth1&#xff1a;192.168.0.50web1web2 1、client配置 [rootclient ~]# cat /etc/NetworkManager/system-connections/eth0.nmconne…...

JSONP跨域

1 概述 定义 json存在的意义&#xff1a; 不同类型的语言&#xff0c;都能识别json JSONP(JSON with Padding)是JSON的一种“使用模式”&#xff0c;可用于解决主流浏览器的跨域数据访问的问题。由于同源策略&#xff0c;一般来说位于 server1.example.com 的网页无法与不是 s…...

Linux--shell脚本语言—/—终章

一、shell函数 1、shell函数定义格式 参数说明&#xff1a; 1、可以带function fun() 定义&#xff0c;也可以直接fun() 定义,不带任何参数。 2、参数返回&#xff0c;可以显示加&#xff1a;return 返回&#xff0c;如果不加&#xff0c;将以最后一条命令运行结果&#xff…...

免费代理池是什么,如何使用代理IP进行网络爬虫?

互联网是一个庞大的数据集合体&#xff0c;网络信息资源丰富且繁杂&#xff0c;想要从中找到自己需要的信息要花费较多的时间。为了解决这个问题&#xff0c;网络爬虫技术应运而生&#xff0c;它的主要作用就是在海量的互联网信息中进行爬取&#xff0c;抓取有效信息并存储。然…...

CAN直接网络管理(20240805)

长安CAN网络管理规范 个人理解&#xff1a;管理CAN网络中各NM节点的工作模式&#xff08;状态&#xff09;&#xff1b; 1.术语定义 &#x1f449;节点地址&#xff1a;用于唯一标识网络中每个节点的单字节数字&#xff0c;取值范围是 0x00~0xFF。&#x1f449;状态迁移&#x…...

HTML5+CSS3笔记(Xmind格式):第二天

Xmind鸟瞰图&#xff1a; 简单文字总结&#xff1a; 新增选择器&#xff1a; 1.选择相邻兄弟 2.属性选择器 3.结构性伪类选择器 4.整体结构类型 5.标签结构类型 6.指定子元素的序号 7.文本选择伪元素 8.表单中使用的状态伪类选择器 9.内容…...

视频压缩文件太大了怎么缩小?6个视频压缩技巧,速度收藏起来!

高清视频文件&#xff0c;尤其是那些以 1080p 和 720p 清晰度为特征的视频&#xff0c;通常都拥有相当大的体积&#xff0c;会占据大量计算机存储空间。因此&#xff0c;为了更好地将它们进行分享和存储&#xff0c;您可能需要对它们进行压缩&#xff0c;以减小它们的尺寸。然而…...

在软件开发中正确使用MySQL日期时间类型的深度解析

在日常软件开发场景中&#xff0c;时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志&#xff0c;到供应链系统的物流节点时间戳&#xff0c;时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库&#xff0c;其日期时间类型的…...

conda相比python好处

Conda 作为 Python 的环境和包管理工具&#xff0c;相比原生 Python 生态&#xff08;如 pip 虚拟环境&#xff09;有许多独特优势&#xff0c;尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处&#xff1a; 一、一站式环境管理&#xff1a…...

如何在看板中体现优先级变化

在看板中有效体现优先级变化的关键措施包括&#xff1a;采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中&#xff0c;设置任务排序规则尤其重要&#xff0c;因为它让看板视觉上直观地体…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)

概述 在 Swift 开发语言中&#xff0c;各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过&#xff0c;在涉及到多个子类派生于基类进行多态模拟的场景下&#xff0c;…...

将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?

Otsu 是一种自动阈值化方法&#xff0c;用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理&#xff0c;能够自动确定一个阈值&#xff0c;将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序

一、开发环境准备 ​​工具安装​​&#xff1a; 下载安装DevEco Studio 4.0&#xff08;支持HarmonyOS 5&#xff09;配置HarmonyOS SDK 5.0确保Node.js版本≥14 ​​项目初始化​​&#xff1a; ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...

用docker来安装部署freeswitch记录

今天刚才测试一个callcenter的项目&#xff0c;所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...

Redis数据倾斜问题解决

Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中&#xff0c;部分节点存储的数据量或访问量远高于其他节点&#xff0c;导致这些节点负载过高&#xff0c;影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...

保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek

文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama&#xff08;有网络的电脑&#xff09;2.2.3 安装Ollama&#xff08;无网络的电脑&#xff09;2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...

【Redis】笔记|第8节|大厂高并发缓存架构实战与优化

缓存架构 代码结构 代码详情 功能点&#xff1a; 多级缓存&#xff0c;先查本地缓存&#xff0c;再查Redis&#xff0c;最后才查数据库热点数据重建逻辑使用分布式锁&#xff0c;二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...