Dubbo集成Nacos作为注册中心
创始人
2024-02-23 03:31:21
0

Nacos简介

什么是Nacos?

  • Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service的首字母简称,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。

  • Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。

  • Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。

  • 服务(Service)是 Nacos 世界的一等公民。Nacos 支持几乎所有主流类型的“服务”的发现、配置和管理:

    • Kubernetes Service
    • gRPC & Dubbo RPC Service
    • Spring Cloud RESTful Service

Nacos的关键特性

  • 服务发现和服务健康监测
  • 动态配置服务
  • 动态 DNS 服务
  • 服务及其元数据管理

说明:因为Dubbo和Nacos的应用场景一般都是在微服务项目中,所以接下来以SpringCloud项目为基础,展示Dubbo集成Nacos作为注册中心

Nacos 安装及入门

看我的另外一篇文章:https://blog.csdn.net/java_cpp_/article/details/128052696

项目目录总览

在这里插入图片描述
以上均是Maven项目

Step01-搭建SpringCloud父项目

使用IDEA创建一个普通的Maven项目,项目名自定义即可也可以跟我一样命名为pringCloud-Dubbo-Nacos,删除src目录
重点是配置pom.xml
下面展示我的配置


4.0.0com.mxfSpringCloud-Dubbo-Nacospom1.0-SNAPSHOT  ShopServiceShopService-Provider-8081ShopService-Provider-8082ShopService-Consumer-909188UTF-82021.0.52.6.134.121.2.171.18.228.0.223.4.3.42021.0.4.03.1.22.1.1org.springframework.cloudspring-cloud-dependencies${spring.cloud.version}pomimportorg.springframework.bootspring-boot-dependencies${spring.boot.version}pomimportcom.alibaba.cloudspring-cloud-starter-alibaba-nacos-discovery${spring.cloud.nacos.version}com.alibaba.cloudspring-cloud-starter-alibaba-nacos-config${spring.cloud.nacos.version}com.alibaba.nacosnacos-client${nacos.version}com.alibaba.cloudspring-cloud-starter-alibaba-sentinel${spring.cloud.nacos.version}org.apache.dubbodubbo-spring-boot-starter${spring.cloud.dubbo.version}mysqlmysql-connector-java${mysql-connector-java.version}org.projectlomboklombok${lombok.version}com.baomidoumybatis-plus-boot-starter${mybatis.plus.version}

注意的是依赖版本尽量跟我一致,否则后续项目启动的时候会出现迷惑性bug(例如:启动时dubbo、nacos报出现循环依赖的问题),到此SpringCloud父项目就搭建完毕

Step02-服务接口模块

服务接口,我是一个购物服务为背景设计相关接口的,本模块可自定义,不一定要按照我的来
总览
在这里插入图片描述
重点是服务接口的定义

public interface ShopService {// 查询所有商品List queryAll();// 根据名称模糊搜索List queryByName(String name);// 添加商品int addGoods(Goods goods);// 根据ID删除商品int delGoods(int id);// 购买商品int shopping(int id);// 测试使用String hello(String name);
}

业务实体类(自由发挥):

@Data
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
public class Goods implements Serializable {private Integer id;private String name;private Double price;private Integer nums; // 库存private String description;
}

服务接口主要是定义后续的服务功能,比较简单

Step03-服务提供者模块

该模块主要是去实现前面编写的服务接口,用来完成具体的业务逻辑
总览
在这里插入图片描述

首先在pom.xml中引入相关的依赖


SpringCloud-Dubbo-Nacoscom.mxf1.0-SNAPSHOT../pom.xml4.0.0ShopService-Provider-808188UTF-8com.mxfShopService1.0-SNAPSHOTorg.springframework.bootspring-boot-starter-webcom.alibaba.cloudspring-cloud-starter-alibaba-nacos-discoverycom.alibaba.cloudspring-cloud-starter-alibaba-nacos-configcom.alibaba.nacosnacos-clientcom.alibaba.cloudspring-cloud-starter-alibaba-sentinelorg.springframework.cloudspring-cloud-starter-bootstraporg.apache.dubbodubbo-spring-boot-startermysqlmysql-connector-javaorg.projectlomboklombokcom.baomidoumybatis-plus-boot-starter

依赖成功引入后,就先编写配置文件application.yaml,上面截图中有个bootstrap.yml,该文件是后续使用Nacos作为配置中心时才需要的,我会更新后续教程,暂时把所有配置配置到本地项目即可
application.yaml

server:port: 8081
mybatis-plus:mapper-locations: classpath:mapper/*.xml
spring:application:name: provider_application_8081datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://192.168.11.219:3306/test?useSSL=true&characterEncoding=utf-8&serverTimeZone=Asia/Shanghai&useUnicode=trueusername: rootpassword: 123456
# dubbo的配置
dubbo:application:name: provider_application_8081	#配置应用名是为了加以区分不同的服务提供者protocol:name: dubboport: -1 # 端口设置为-1 是让dubbo自动在[20880, 65536]之间找一个可用的端口registry:id: nacos-registryaddress: nacos://192.168.11.233:8848	# 在此配置nacos服务的IP地址及端口config-center:	# 可选address: nacos://192.168.11.233:8848metadata-report:	# 可选address: nacos://192.168.11.233:8848

下面重点介绍服务实现类ShopServiceImpl

/*** 用 @DubboService 注解标记,就可以实现 Dubbo 的服务暴露* 如果要设置服务参数,@DubboService 也提供了常用参数的设置方式。如果有更复杂的参数设置需求,则可以考虑使用其他设置方式* @DubboService(version = "1.0.0", group = "dev", timeout = 5000)*/
@DubboService
@Service
public class ShopServiceImpl implements ShopService { // 实现前面定义的服务接口@Autowiredprivate GoodsService goodsService; // 使用MyBaits-Plus做业务层持久框架实现的DAO层服务类,该服务自行实现,就不展示@Value("${spring.application.name}")private String applicationName; // 把服务名注入进来主要是用来识别不同服务提供者@Overridepublic List queryAll() {return goodsService.list();}@Overridepublic List queryByName(String name) {QueryWrapper wrapper = new QueryWrapper<>();wrapper.like("name", name);return goodsService.list(wrapper); }@Overridepublic int addGoods(Goods goods) {return goodsService.save(goods) ? 1 : 0;}@Overridepublic int delGoods(int id) {return goodsService.removeById(id) ? 1 : 0;}@Overridepublic int shopping(int id) {return goodsService.shopping(id);}@Overridepublic String hello(String name) {return "Hello: " + name + " From " + applicationName;}
}

启动类的编写

@SpringBootApplication
@EnableDubbo	// @EnableDubbo 注解必须配置,否则将无法加载 Dubbo 注解定义的服务,@EnableDubbo 可以定义在主类上
public class ProviderApplication_8081 {public static void main(String[] args) {SpringApplication.run(ProviderApplication_8081.class, args);}
}

OK,持久层代码就不展示了较为容易实现都是固定写法,一个端口为8081的服务提供者模块编写成完成,接下来在编写运行在8082端口的服务。

Step04-8082端口上的服务提供者

该模块跟8081服务全部一样,直接复制上面那个项目进行部分修改即可
总览:
在这里插入图片描述

  • 改下启动类的类名
  • 修改配置文件中的端口及应用名
server:port: 8082
mybatis-plus:mapper-locations: classpath:mapper/*.xml
spring:application:name: provider_application_8082datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://192.168.11.219:3306/test?useSSL=true&characterEncoding=utf-8&serverTimeZone=Asia/Shanghai&useUnicode=trueusername: rootpassword: mxf520
# dubbo的配置
dubbo:application:name: provider_application_8082protocol:name: dubboport: -1registry:id: nacos-registryaddress: nacos://192.168.11.233:8848config-center:address: nacos://192.168.11.233:8848metadata-report:address: nacos://192.168.11.233:8848

到此服务提供者模块全部实现

Step05-服务消费者模块

该模块主要是调用8081、8082端口的服务
总览:
在这里插入图片描述
导入依赖:


SpringCloud-Dubbo-Nacoscom.mxf1.0-SNAPSHOT../pom.xml4.0.0ShopService-Consumer-909188UTF-8com.mxfShopService1.0-SNAPSHOTorg.springframework.bootspring-boot-starter-webcom.alibaba.cloudspring-cloud-starter-alibaba-nacos-discoverycom.alibaba.cloudspring-cloud-starter-alibaba-nacos-configcom.alibaba.nacosnacos-clientorg.springframework.cloudspring-cloud-starter-bootstraporg.apache.dubbodubbo-spring-boot-startercom.alibaba.cloudspring-cloud-starter-alibaba-sentinel

配置文件applicatin.yaml:

server:port: 9091
spring:application:name: consumer_application_9091# dubbo的配置
dubbo:application:name: consumer_application_9091protocol:name: dubboport: -1registry:id: nacos-registryaddress: nacos://192.168.11.233:8848config-center:address: nacos://192.168.11.233:8848metadata-report:address: nacos://192.168.11.233:8848

实现远程服务调用

@RestController
public class ShopController {/*** @Reference 注解从 3.0 版本开始就已经废弃,改用 @DubboReference,以区别于 Spring 的 @Reference 注解* @DubboReference 注解将自动注入为 Dubbo 服务代理实例,使用 shopService 即可发起远程服务调用*/@DubboReferenceprivate ShopService shopService;@GetMapping("/queryAll")public List queryAllGoods() {return shopService.queryAll();}@GetMapping("/queryByName")public List queryByName(String name) {return shopService.queryByName(name);}@GetMapping("/hi")public String hello(String name) {return shopService.hello(name);}
}

启动类:

@SpringBootApplication
@EnableDubbo
public class ConsumerApplication_9091 {public static void main(String[] args) {SpringApplication.run(ConsumerApplication_9091.class, args);}
}

OK,整个项目搭建到此已经完成,下面看项目运行展示

项目演示

首先启动Nacos(这里就以单机模式启动)
在这里插入图片描述
然后启动两个服务提供者:
ProviderApplication_8081ProviderApplication_8082
在这里插入图片描述
最后启动服务消费者:
ConsumerApplication_9091
在这里插入图片描述
OK,现在服务全部启动完毕,下面看nacos中的注册信息
在这里插入图片描述
可以看到,两个服务提供者和一个服务消费者全部注册进来了,到此Nacos就作为一个注册中心实现了服务注册功能
下面进行消费者端的远程服务调用测试:

接口测试

先看下之前定义的服务接口:

public interface ShopService {// 查询所有商品List queryAll();// 根据名称模糊搜索List queryByName(String name);// 添加商品int addGoods(Goods goods);// 根据ID删除商品int delGoods(int id);// 购买商品int shopping(int id);// 测试使用String hello(String name);
}
  • 首先测试hello()方法
    在消费端9091调用:
    在这里插入图片描述
    可以看到是8081端口的提供者响应服务,多调用几次就能看到8082端口的提供者响应服务了:
    在这里插入图片描述
    该服务的实现是在8081、8082两个端口处实现的,消费端只是进行了一次RPC远程调用通过Dubbo实现的,同时也体现了Nacos注册中心的服务发现功能

  • 测试查询所有商品的接口:
    在这里插入图片描述
    成功与后端数据库连通,就可以在此基础上进行更为复杂的业务开发了。

Nacos作为配置中心

待更新…

转载请标明出处:https://blog.csdn.net/Java_cpp_/article/details/128051413

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
苏州离哪个飞机场近(苏州离哪个... 本篇文章极速百科小编给大家谈谈苏州离哪个飞机场近,以及苏州离哪个飞机场近点对应的知识点,希望对各位有...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
客厅放八骏马摆件可以吗(家里摆... 今天给各位分享客厅放八骏马摆件可以吗的知识,其中也会对家里摆八骏马摆件好吗进行解释,如果能碰巧解决你...