重庆做网站怎么做呀,wordpress优化检测,网站选项卡图标,企业网站建设存在的问题本文讲解项目中集成nacos#xff0c;并将nacos作为注册中心使用的过程。本文不涉及nacos的原理。
1、项目简介
以一个演示项目为例#xff0c;项目包含三个服务#xff0c;调用及依赖如下图#xff1a; 由图中可以看出#xff0c;coupon-customer-serv为服务的消费者并将nacos作为注册中心使用的过程。本文不涉及nacos的原理。
1、项目简介
以一个演示项目为例项目包含三个服务调用及依赖如下图 由图中可以看出coupon-customer-serv为服务的消费者coupon-calculation-serv和coupon-template-serv为服务的提供者。业务简述如下表
序号服务名称服务描述1coupon-template-serv优惠卷模板服务提供模板的创建功能。比如打折优惠券当用户领取优惠卷时优惠卷由模板生成而具体打折多少由商家指定。2coupon-calculation-serv优惠卷计算服务。当用户支付订单时根据用户购买的商品和已有的优惠券计算实际支付的货款。3coupon-customer-serv用户服务。包含用户领取优惠券、支付等功能。
2、主要依赖的版本
springboot2.4.2spring cloud2020.0.1spring cloud alibaba2021.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 --dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-dependencies/artifactIdversion2020.0.1/versiontypepom/typescopeimport/scope/dependency!--spring cloud alibaba --dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-alibaba-dependencies/artifactIdversion2021.1/versiontypepom/typescopeimport/scope/dependency打开coupon-template-impl模块下的pom.xml文件添加nacos依赖
dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-nacos-discovery/artifactId
/dependency3.3、配置nacos服务发现
打开coupon-template-impl下的application.yml文件添加如下配置 springcloud: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# 命名空间IDNacos通过不同的命名空间来区分不同的环境进行数据隔离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文件添加以下依赖
!--服务发现--
dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-nacos-discovery/artifactId
/dependency!--负载均衡--
dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-loadbalancer/artifactId
/dependency!--webflux调用--
dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-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 {BeanLoadBalancedpublic WebClient.Builder register() {return WebClient.builder();}
}5、三个服务git
coupon-template-serv coupon-calculation-serv coupon-custom-serv Ok, Have a nice day!