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客户端向服务端发送心跳的时间间隔,时间单位其实是ms
	        heart-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对象:

 @Autowired
 private WebClient.Builder webClientBuilder;

webClientBuilder对象的配置:

@org.springframework.context.annotation.Configuration
public class Configuration {

    @Bean
    @LoadBalanced
    public WebClient.Builder register() {
        return WebClient.builder();
    }
}

5、三个服务git

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值