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

无脑整合springboot2.7+nacos2.2.3+dubbo3.2.9实现远程调用及配置中心

简介:

        好久没有写博客了,最近辞职了有时间进行一次分享,今天我们主要是使用单体服务springboot整合nacos实现配置中心,然后整合dubbo来实现远程的rpc调用。如下是本地案例架构图,生产者和消费者的配置在nacos配置中心上,将服务注册在nacos注册中心上,进行服务的管理,消费者通过http调用消费者接口。

1、环境准备及组件版本

  • nacos 2.2.3
  • mysql 5.7(用于nacos持久化)
  • dubbo 3.2.9
  • jdk8
  • springboot 2.7.8

2、nacos下载与持久化配置

nacos下载连接

  • 找到下边配置nacos-server-2.2.3\nacos\conf下的application.properties修改如下
spring.datasource.platform=mysql
# spring.sql.init.platform=mysql### Count of DB:
db.num=1### Connect URL of DB:
db.url.0=jdbc:mysql://192.168.1.9:3307/nacos1?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=xxxxxx### Connection pool configuration: hikariCP
db.pool.config.connectionTimeout=30000
db.pool.config.validationTimeout=10000
db.pool.config.maximumPoolSize=20
db.pool.config.minimumIdle=2

注意:需要将ip和账号密码以及数据库名称改为自己创建的名称!

  • 进入nacos-server-2.2.3\nacos\bin配置中打开cmd指令执行startup.cmd -m standalone

  • 打开http://127.0.0.1:8848/nacos/地址没问题说明就安装好了

  • 首先创建一个命名空间dev在dev中创建生产者和消费者配置

  • 配置dubbo-consumer和dubbo-provider在配置中心中
# dubbo-consumer
spring:application:name: dubbo-consumer
# 服务器端口配置
server:port: 8801# Dubbo相关配置
dubbo:application:name: dubbo-consumer  qos-port: 22223qos-enable: trueregistry:address: nacos://127.0.0.1:8848parameters:namespace: f5b986ac-74e6-4592-b874-0acfee2923dcscan:base-packages: com.example.dubboconsumer.service test: 测试
# dubbo-providerspring:application:name: dubbo-providerdubbo:application:name: dubbo-providerprotocol:name: dubboport: 20880registry:address: nacos://127.0.0.1:8848parameters:namespace: f5b986ac-74e6-4592-b874-0acfee2923dcscan:base-packages: com.example.dubboprovider.service

注意:文件格式都为yaml即可

3、idea构建项目

  • 项目结构如下:api为接口模块、consumer为消费者、provider为生产者

  • 父级项目pom配置依赖如下
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.8</version></parent><groupId>com.example</groupId><artifactId>dubbo-nacos-demo</artifactId><version>1.0.0-SNAPSHOT</version><packaging>pom</packaging><properties><java.version>1.8</java.version><dubbo.version>3.2.9</dubbo.version><nacos.version>2.2.3</nacos.version></properties><dependencies><!-- Dubbo --><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-spring-boot-starter</artifactId></dependency><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-registry-nacos</artifactId></dependency><dependency><groupId>com.alibaba.boot</groupId><artifactId>nacos-config-spring-boot-starter</artifactId></dependency></dependencies><dependencyManagement><dependencies><!-- Dubbo --><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-spring-boot-starter</artifactId><version>${dubbo.version}</version></dependency><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-registry-nacos</artifactId><version>${dubbo.version}</version></dependency><dependency><groupId>com.alibaba.boot</groupId><artifactId>nacos-config-spring-boot-starter</artifactId><version>0.2.12</version></dependency></dependencies></dependencyManagement><modules><module>demo-api</module><module>dubbo-provider</module><module>dubbo-consumer</module></modules>
</project>
  • 接口模块、生产者和消费者的配置分别如下
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>com.example</groupId><artifactId>dubbo-nacos-demo</artifactId><version>1.0.0-SNAPSHOT</version></parent><groupId>com.example</groupId><artifactId>dubbo-api</artifactId><version>1.0.0</version><packaging>jar</packaging></project>
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>com.example</groupId><artifactId>dubbo-nacos-demo</artifactId><version>1.0.0-SNAPSHOT</version></parent><artifactId>dubbo-provider</artifactId><packaging>jar</packaging><dependencies><!-- api组件依赖 --><dependency><groupId>com.example</groupId><artifactId>dubbo-api</artifactId><version>1.0.0</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies></project>
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>dubbo-nacos-demo</artifactId><groupId>com.example</groupId><version>1.0.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>dubbo-consumer</artifactId><packaging>jar</packaging><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target></properties><dependencies><!-- api组件依赖 --><dependency><groupId>com.example</groupId><artifactId>dubbo-api</artifactId><version>1.0.0</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies>
</project>

注意事项:在搭建环境初期,由于dubbo相关依赖版本和springboot的版本存在版本不兼容问题调查很长时间解决所以请务必按照上述个版本引入其他版本可能存在不兼容问题!!!下面是各个版本兼容关系!

  • api模块代码
package com.example.demoapi;public interface HelloService {String sayHello(String name);
}
  • 生产者代码
package com.example.dubboprovider.service;import com.example.demoapi.HelloService;
import org.apache.dubbo.config.annotation.DubboService;@DubboService(version = "1.0.0")
public class HelloServiceImpl implements HelloService {@Overridepublic String sayHello(String name) {return "Hello " + name + " from Dubbo provider!";}
}
package com.example.dubboprovider;import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
@EnableDubbo
public class DubboProviderApplication {public static void main(String[] args) {SpringApplication.run(DubboProviderApplication.class, args);}}
nacos.config.server-addr=127.0.0.1:8848
nacos.config.data-id=dubbo-provider
nacos.config.namespace=f5b986ac-74e6-4592-b874-0acfee2923dc
nacos.config.type=yaml
nacos.config.auto-refresh=true
nacos.config.bootstrap.enable=true
  • 消费者模块代码
package com.example.dubboconsumer.controller;import com.alibaba.nacos.api.config.annotation.NacosValue;
import com.example.demoapi.HelloService;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;@RestController
public class ConsumerController {@DubboReference(version = "1.0.0",timeout = 5000)private HelloService helloService;@NacosValue(value = "${test}", autoRefreshed = true)private String test;@GetMapping("/hello/{name}")public String sayHello(@PathVariable String name) {return helloService.sayHello(name);}@GetMapping("/test")public String test() {return 11+test;}
}
package com.example.dubboconsumer;import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
@EnableDubbo
public class DubboConsumerApplication {public static void main(String[] args) {SpringApplication.run(DubboConsumerApplication.class, args);}}
#server.port=8081
nacos.config.server-addr=127.0.0.1:8848
nacos.config.data-id=dubbo-consumer
nacos.config.namespace=f5b986ac-74e6-4592-b874-0acfee2923dc
nacos.config.type=yaml
nacos.config.auto-refresh=true
nacos.config.bootstrap.enable=true

4、测试

  • 通过消费者调用生产者接口

  • 通过调用接口读取配置中心的配置test

http://www.xdnf.cn/news/17784.html

相关文章:

  • 计算机网络 THU 考研专栏简介
  • L2 级别自动驾驶 硬件架构设计
  • LeetCode 922.按奇偶排序数组2
  • ElasticSearch不同环境同步索引数据
  • Spring Ai 如何配置以及如何搭建
  • Jmeter自定义脚本
  • 零基础学会制作 基于STM32单片机智能加湿系统/加湿监测/蓝牙系统/监测水量
  • 探索无人机图传技术:创新视野与无限可能
  • 在 macOS 上顺利安装 lapsolver
  • OpenCV Python——VSCode编写第一个OpenCV-Python程序 ,图像读取及翻转cv2.flip(上下、左右、上下左右一起翻转)
  • 死锁总结及解决方案
  • 关于截屏时实现游戏暂停以及本地和上线不同步问题
  • 用GPT解释“GPT-5”是什么,有什么优势
  • python-pycharm切换python各种版本的环境与安装python各种版本的环境(pypi轮子下载)
  • Flink Stream API 源码走读 - map 和 flatMap
  • KNN(k近邻算法)
  • Chrome插件开发实战:从架构到发布全流程
  • 准备用Qt6 重写音视频会议系统服务端
  • 开源 Arkts 鸿蒙应用 开发(十五)自定义绘图控件--仪表盘
  • 开源 Arkts 鸿蒙应用 开发(十六)自定义绘图控件--波形图
  • 【Javaweb学习|黑马笔记|Day1】初识,入门网页,HTML-CSS|常见的标签和样式|标题排版和样式、正文排版和样式
  • 前端css学习笔记6:盒子模型
  • 国内著名AI搜索优化专家孟庆涛发表《AI搜索内容可信度评估综合指南》
  • liteflow
  • Vue3中的ref与reactive全面解析:如何正确选择响应式声明方式
  • Java List 集合详解(ArrayList、LinkedList、Vector)
  • 水印消失术!JavaAI深度学习去水印技术深度剖析
  • 传输层协议TCP(3)
  • Flink Stream API 源码走读 - socketTextStream
  • 集成电路学习:什么是Machine Learning机器学习