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.mzph.cn/news/163212.shtml

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

相关文章

基于element自动表格

需求是根据JSON文件生成表格&#xff0c;包含配置和自动props属性以及过滤器&#xff1b; 数据示例&#xff1a; 表格设置&#xff1a; /*** 表格表头信息* chineseToPinYin: 这是封装的根据中文汉字转换为拼音的方法* prop: 表头字段名* filter: 数据过滤器* label: 表头显示…

类初始化,类加载,类加载器

类初始化&#xff0c;类加载&#xff0c;类加载器 1. 类加载1.1. 类的加载1.2. 类的链接1.2.1. 验证1.2.2. 准备1.2.3. 解析 2. 类加载器2.1. 类加载器分为四种&#xff1a;前三种为虚拟机自带的加载器。2.2. 类加载有三种方式&#xff1a;2.3. **JVM类加载机制**2.4. 双亲委派…

GeoTrust通配符证书:保护您的网站安全

GeoTrust通配符 SSL证书是一种特殊的 SSL 证书类型&#xff0c;它可以同时为您的主域名及其所有子域提供安全保护。无论您有多少个不同的子域需要保障&#xff0c;都可以通过单一的 GeoTrust 通配符 SSL 证书轻松实现&#xff0c;极大地简化了管理流程并降低了成本。 此外&…

1688商品详情数据接口(1688.item_get)

1688商品详情数据接口是一种程序化的接口&#xff0c;通过这个接口&#xff0c;商家或开发者可以使用自己的编程技能&#xff0c;对1688平台上的商品信息进行查询、获取和更新。这个接口允许商家根据自身的需求&#xff0c;获取商品的详细信息&#xff0c;例如价格、库存、描述…

群晖NAS搭建WebDav服务做文件共享,可随时随地远程访问

文章目录 1. 在群晖套件中心安装WebDav Server套件1.1 安装完成后&#xff0c;启动webdav服务&#xff0c;并勾选HTTP复选框 2. 局域网测试WebDav服务2.1 下载RaiDrive客户端2.2 打开RaiDrive&#xff0c;设置界面语言可以选择中文2.3 点击添加按钮&#xff0c;新建虚拟驱动区2…

从事软件测试8年,对业务测试人员的一些思考

自从事测试工作八年多以来&#xff0c;经历过三个部门多条业务线&#xff0c;也经历过测试转型再回到测试&#xff0c;在此过程中对测试工作和角色的认知也逐步有些思考&#xff0c;想把这些思考分享给大家&#xff0c;希望为业务测试同学提供一些有价值的思路。 同时&#xff…

YOLOV7主干改进,使用fasternet轻量化改进主干(完整教程)

1&#xff0c;Pconv&#xff08;来自Fasternet&#xff09;&#xff08;可作为模型中的基础卷积模块使用&#xff09; 论文链接&#xff1a;https://arxiv.org/abs/2303.03667 2&#xff0c;为了大家方便的使用&#xff0c;这里我对原本的PConv的代码做了部分的改动&#xff0…

豪华程度堪比飞机头等舱?奔驰在北美发布Tourrider系列巴士

今年三月&#xff0c;奔驰工厂附近出现了一台特殊的测试车。其突出的前保险杠以及竖置双风挡等特殊配置&#xff0c;都在暗示着它并非是为欧洲市场打造。 根据特征推测&#xff0c;这台车应该是为北美市场打造。 就在昨天&#xff0c;奔驰发布了旗下全新Tourrider系列豪华客车&…

嵌入式单片机方向和Linux驱动开发方向哪个发展前景好?

嵌入式单片机方向和Linux驱动开发方向哪个发展前景好&#xff1f; 在某些平台上看到很多人鼓吹嵌入式Linux开发比单片机开发要好&#xff0c;让所有人都去做嵌入式Linux开发。说这种话的人大多数是嵌入式Linux的培训机构&#xff0c;或者是一开始就以嵌入式Linux入门的那一批人…

飞书如何接入ChatGPT-打造个人智能问答助手实现无障碍交流

目录 前言 环境列表 1.飞书设置 2.克隆feishu-chatgpt项目 3.配置config.yaml文件 4.运行feishu-chatgpt项目 5.安装cpolar内网穿透 6.固定公网地址 7.机器人权限配置 8.创建版本 9.创建测试企业 10. 机器人测试 总结 前言 在飞书中创建chatGPT机器人并且对话&am…

抖音汽车租赁小程序技术指南:开发高效便捷的租赁系统

为了更好地满足用户需求&#xff0c;抖音汽车租赁小程序成为一个备受关注的技术解决方案。本文将深入探讨开发高效便捷的汽车租赁系统所需的技术要点&#xff0c;为开发者提供一份实用的技术指南。 小程序架构选择 在搭建抖音汽车租赁小程序时&#xff0c;选择合适的小程序架构…

【SpringMVC】 参数传递

一.项目目录 SpringBoot项目创建之后会生成很多目录 删除不需要的这四个文件/目录 目录 二.Spring MVC 和 MVC Spring MVC(Spring Web MVC) Spring Web MVC 是⼀个 Web 框架 MVC : Model View Controller 它是一种思想 , 它把一个项目分成了三个部分. View视图层 界面显示…

python+pytest接口自动化:token关联登录这样做,阿里p8都直呼牛逼!!!

在PC端登录公司的后台管理系统或在手机上登录某个APP时&#xff0c;经常会发现登录成功后&#xff0c;返回参数中会包含token&#xff0c;它的值为一段较长的字符串&#xff0c;而后续去请求的请求头中都需要带上这个token作为参数&#xff0c;否则就提示需要先登录。 这其实就…

如何在Linux系统上检测GPU显存和使用情况?

如何在Linux系统上检测GPU显存和使用情况&#xff1f; 在Linux系统上&#xff0c;你可以使用一些命令行工具来检测GPU显存和使用情况。以下是一些常用的方法&#xff1a; 1. 使用nvidia-smi&#xff08;仅适用于NVIDIA GPU&#xff09; 如果你使用的是NVIDIA的显卡&#xff0…

Claude 发布2.1 版本,重大升级更新来看看有什么新功能?

11 月 23 日消息&#xff0c;OpenAI 竞争对手 Anthropic 日前推出了 Claude 2.1 聊天机器人及对应同名 AI 模型Claude 2.1&#xff0c;本文将总结Claude 2.1的主要功能。 增强的处理能力 上下文处理量大幅提升&#xff1a;Claude 2.1 现在能处理高达 200K上下文标记&#xff…

2、单片机及开发板介绍

单片机介绍 单片机&#xff0c;英文Micro Controller Unit,简称&#xff1a;MCU 内部集成&#xff1a;CPU、RAM(随机存储器)、ROM&#xff08;只读存储器&#xff09;、定时器、中断系统、通讯接口等 作用&#xff1a;信息采集&#xff08;传感器&#xff09;、处理&#xff0…

uniapp 适配部分IPhone手机底部安全距离

部分 IOS 机型&#xff0c;比如 Iphone X 的屏幕底部有一条“小黑线”区域&#xff0c;uniapp 项目中我们可以使用CSS的 env(safe-area-inset-bottom) 语句来自适配 IOS 的底部安全区域高度&#xff0c;这个语句会返回该机型的底部安全区域高度&#xff08;单位 px&#xff09;…

ffmpeg播放器实战(播放器流程)

1.流程图 1.main窗口创建程序窗口 程序窗口构造函数执行下面内容 2.开启播放 3.开启解码 4.开启渲染 5.反馈给ui 本文福利&#xff0c; 免费领取C音视频学习资料包学习路线大纲、技术视频/代码&#xff0c;内容包括&#xff08;音视频开发&#xff0c;面试题&#xff0c;FFmpeg…

Linux C++ 服务器端这条线怎么走?一年半能做出什么?

Linux C 服务器端这条线怎么走&#xff1f;一年半能做出什么&#xff1f; 既然你是在校学生&#xff0c;而且编程语言和数据结构的基础还不错&#xff0c;我认为应该在《操作系统》和《计算机体系结构》这两门课上下功夫&#xff0c;然后才去读编程方面的 APUE、UNP 等书。 最…

【深度学习】如何选择神经网络的超参数

1. 神经网络的超参数分类 神经网路中的超参数主要包括: 1. 学习率 η 2. 正则化参数 λ 3. 神经网络的层数 L 4. 每一个隐层中神经元的个数 j 5. 学习的回合数Epoch 6. 小批量数据 minibatch 的大小 7. 输出神经元的编码方式 8. 代价函数的选择 9. 权重初始化的方法 …