6-使用nacos作为注册中心

本文讲解项目中集成nacos,并将nacos作为注册中心使用的过程。本文不涉及nacos的原理。

1、项目简介

以一个演示项目为例,项目包含三个服务,调用及依赖如下图:
在这里插入图片描述
由图中可以看出,coupon-customer-serv为服务的消费者,coupon-calculation-serv和coupon-template-serv为服务的提供者。业务简述如下表:

序号服务名称服务描述
1coupon-template-serv优惠卷模板服务,提供模板的创建功能。比如打折优惠券,当用户领取优惠卷时,优惠卷由模板生成,而具体打折多少,由商家指定。
2coupon-calculation-serv优惠卷计算服务。当用户支付订单时,根据用户购买的商品和已有的优惠券,计算实际支付的货款。
3coupon-customer-serv用户服务。包含用户领取优惠券、支付等功能。

2、主要依赖的版本

  • springboot:2.4.2
  • spring cloud:2020.0.1
  • spring cloud alibaba:2021.1

3、开工

关于springboot项目的搭建,此处略过。此处只讨论spring cloud相关的内容。先集成服务提供者(coupon-template-serv、coupon-calculation-serv),再集成服务消费者。

3.1、模块内部结构介绍

下面从coupon-template-serv服务开始,集成nacos。该服务的目录结构如下:
在这里插入图片描述
内部各模块介绍:

  • coupon-template-api:存放该项目用到dto类
  • coupon-template-dao: 数据库操作模块
  • coupon-template-impl: 服务层和controller保存的地方,也是springboot的入口。

3.2、引入依赖

打开coupon-template-serv模块下的pom.xml文件(也就是模块的根pom.xml),添加如下依赖:

 <!--spring cloud --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>2020.0.1</version><type>pom</type><scope>import</scope></dependency><!--spring cloud alibaba --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>2021.1</version><type>pom</type><scope>import</scope></dependency>

打开coupon-template-impl模块下的pom.xml文件,添加nacos依赖:

<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

3.3、配置nacos服务发现

打开coupon-template-impl下的application.yml文件,添加如下配置:

 spring:cloud:nacos:discovery:# Nacos的服务注册地址,可以配置多个,逗号分隔server-addr: 192.168.110.165:8848,192.168.110.165:8948# 服务注册到Nacos上的名称,一般不用配置service: coupon-template-serv# nacos客户端向服务端发送心跳的时间间隔,时间单位其实是msheart-beat-interval: 5000# 服务端没有接受到客户端心跳请求就将其设为不健康的时间间隔,默认为15s# 注:推荐值该值为15s即可,如果有的业务线希望服务下线或者出故障时希望尽快被发现,可以适当减少该值heart-beat-timeout: 20000# 元数据部分 - 可以自己随便定制metadata:mydata: abc# 客户端在启动时是否读取本地配置项(一个文件)来获取服务列表# 注:推荐该值为false,若改成true。则客户端会在本地的一个# 文件中保存服务信息,当下次宕机启动时,会优先读取本地的配置对外提供服务。naming-load-cache-at-start: false# 命名空间ID,Nacos通过不同的命名空间来区分不同的环境,进行数据隔离,namespace: dev# 创建不同的集群cluster-name: Cluster-A# [注意]两个服务如果存在上下游调用关系,必须配置相同的group才能发起访问group: myGroup# 向注册中心注册服务,默认为true# 如果只消费服务,不作为服务提供方,倒是可以设置成false,减少开销register-enabled: true

配置的注释比较详细,可以对照着看。注意nacos的ip地址和端口改成你自己的。

3.4、验证集成成功

启动nacos,再启动coupon-template-impl,仔细观察打印的日志,如图:

在这里插入图片描述
再打开nacos管理端,看服务的注册情况,因为我们的服务注册在namespace dev下,所以看dev:
在这里插入图片描述
至此,服务提供者集成完毕,并验证成功。
coupon-calculation-serv服务也是服务提供者,集成过程类似,此处不再赘述。

3.5、服务消费者coupon-customer-serv集成

项目结构如图:
在这里插入图片描述

3.5.1、添加依赖

根pom.xml与上面一致,但是作为服务的消费者,需要配置负载均衡等依赖。所以,打开
coupon-custom-impl模块的pom.xml文件,添加以下依赖:

<!--服务发现-->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency><!--负载均衡-->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency><!--webflux调用-->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-webflux</artifactId>
</dependency>

再配置application.yml文件,它与上面两个服务配置一样,保证服务名称不一致就行了。再次查看nacos管理端,现在有三个服务在注册中心。
在这里插入图片描述

4、发起远程调用

这里用webflux发起调用,有兴趣的同学去网上查一下资料,这里仅展示一下调用的代码:

 ...CouponTemplateInfo templateInfo = webClientBuilder.build().get().uri("http://coupon-template-serv/template/getTemplate?id=" + request.getCouponTemplateId()).retrieve().bodyToMono(CouponTemplateInfo.class).block();

注意:uri中用的是服务名而不是ip地址+端口,这样调用时,nacos会把具体的地址给调用方,另一个,还有负载均衡的意思。因为实际中用webflux调用的比较少,话不多说。

注入webClientBuilder对象:

 @Autowiredprivate WebClient.Builder webClientBuilder;

webClientBuilder对象的配置:

@org.springframework.context.annotation.Configuration
public class Configuration {@Bean@LoadBalancedpublic WebClient.Builder register() {return WebClient.builder();}
}

5、三个服务git

coupon-template-serv
coupon-calculation-serv
coupon-custom-serv
Ok, Have a nice day!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/208815.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Log4j

通过Log4j&#xff0c;我们可以控制日志信息输送到目的地是控制台、文件、GUI组件&#xff0c;甚至是套接口服务器、NT的事件记录器。我们可以控制每一条日志的输出格式。通过定义每一条日志信息的级别&#xff0c;能更加细致地控制日志的生成过程。 1 log4j、log4j2与SLF4J …

Java Spring

文章目录 SpringSpring 是什么&#xff1f;从Spring中获取Beanxml获取注解存储类注解⽅法注解bean命名规则类注解之间的关系 注解获取bean属性注⼊缺点 构造⽅法注⼊Setter 注⼊三种注⼊优缺点分析Resource&#xff1a;另⼀种注⼊关键字同⼀类型多个 Bean 报错处理 获取bean对象…

PDF转Word,1行Python代码就够了,免费用

大家好&#xff0c;这里是程序员晚枫。 今年十一假期没出去旅游&#xff0c;在家里更新一套原创课程&#xff0c;&#x1f449;给小白的《50讲Python自动化办公》。 所有功能&#xff0c;都只需要1行代码&#xff0c;非常适合非程序员入门Python使用。 目前全网播放量直逼100…

封装一个基于ThreeJS渲染基础模型的类,非常简单,可拖动可缩放

工作需求要求threeJS渲染一个模型以供可视化大屏展示&#xff0c;抛出模型精度不谈&#xff0c;只说业务实现 1.Three.JS的引入 ThreeJS官网地址:Three.js – JavaScript 3D Library 查看文档 中文切换及安装创建步骤 如果是自己研究学习用的&#xff0c;在官网安装完后&…

VScode调试没有反应

点击调试按钮后没反应 有可能是vscode中安装的python插件版本问题 可以通过重新安装比较旧一点的python尝试解决此问题 步骤如下&#xff1a; 然后从中选择比当前版本更低的版本即可 安装完成后需重启vscode

汇编-pop出栈指令

32位汇编 执行动作分为两步&#xff1a; 第一步&#xff1a;读出数据 第二步&#xff1a;改变栈地址 如果操作数是16位&#xff0c; 则ESP加2&#xff1b; 如果操作数是32位&#xff0c; 则ESP加4 espesp2 或 espesp4 格式&#xff1a;

ios qt开发要点

目前关于ios qt的开发资料比较少&#xff0c;这里整理了几个比较重要的开发要点&#xff0c;基于MacOS14 Xcode15 Qt15.5 cmake iphone真机。 cmake报错&#xff0c;报错信息如下 CMake Error at /Users/user/Qt/5.15.5/ios/lib/cmake/Qt5Core/Qt5CoreConfig.cmake:91 (m…

opencv-直方图

直方图是一种对图像亮度分布的统计表示&#xff0c;它显示了图像中每个灰度级别的像素数量。在OpenCV中&#xff0c;你可以使用cv2.calcHist() 函数计算直方图。 以下是一个简单的示例&#xff0c;演示如何计算和绘制图像的直方图&#xff1a; import cv2 import numpy as np …

for 循环变量的声明方式

获取字符串中的第一个单词&#xff0c;for 循环中的 &value 声明比较特殊&#xff0c;结合图1编译器的提示&#xff0c;value 是一个 u8 类型。 fn get_first_world(s: &str) -> &str {let bytes s.as_bytes();for (i, &value) in bytes.iter().enumerate…

Arthas 监听 Docker 部署的java项目CPU占比高的信息

1、Linux上安装Arthas wget https://alibaba.github.io/arthas/arthas-boot.jar2、docker ps 查看目标项目的容器ID 3、copy Arthas 到目标容器中 (注意有 &#x1f615; ) docker cp arthas-boot.jar d97e8666666:/4、进入到目标容器目录中 docker exec -it d97e8666666 /b…

【VScode】安装配置、插件及远程SSH连接

一、VSCode安装 二、配置安装插件 三、配置远程连接SSH 四、MinGW 一、VSCode安装 VS官网 Visual Studio Code - Code Editing. Redefined下载安装包&#xff1a; 二、配置安装插件 安装中文插件 配置字体为20 配置文件–>首选项->设置->Font Size为20 设置 VSC…

git stash 用法总结

目录 1&#xff0c;介绍场景1&#xff1a;场景2&#xff1a; 2&#xff0c;常用命令2.1&#xff0c;基础2.2&#xff0c;进阶1&#xff0c;存储时指定备注2&#xff0c;通过索引来操作指定的存储3&#xff0c;修改存储规则 2.3&#xff0c;查看 stash 修改的具体内容 1&#xf…