SpringBoot结合Nacos

本文介绍了如何下载并启动Nacos,创建Springboot项目并添加Nacos依赖,配置应用以实现服务注册与发现。同时,讲解了消费者模块的创建,使用RestTemplate进行服务调用,并通过@LoadBalanced实现负载均衡。此外,还详细阐述了Nacos中namespace、DataId的配置以及如何通过yaml配置动态刷新。
摘要由CSDN通过智能技术生成

1.下载nacos

链接:https://pan.baidu.com/s/1t4pNVQ2X5etwpIoN4H7VGw 
提取码:5alh

百度网盘的版本是1.1.4

还有一个是1.3.2

下载完毕后直接解压文件即可!

2. 启动nacos

进入到nacos的bin目录当中,cmd打开命令行,输入:

startup.cmd -m standalone 

当你看到这个页面的时候表示nacos已经启动了,接下来我们需要访问下。http://localhost:8848/nacos/#/login 

 看到这个页面表示我们已经进入nacos,默认的账号密码都是nacos

3. 创建springboot项目,然后添加依赖

 
      <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        <version>2.2.9.RELEASE</version>
      </dependency>
      <!--spring cloud Hoxton.SR1-->
      <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-dependencies</artifactId>
        <version>Hoxton.SR1</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
      <!--spring cloud alibaba 2.1.0.RELEASE-->
      <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-alibaba-dependencies</artifactId>
        <version>2.1.0.RELEASE</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>

4. 配置application文件

spring:
  application:
    name: nacos-payment-provider  #这个相当于是你服务端的名称,可以在nacos中看到
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #配置Nacos地址
management:
  endpoints:
    web:
      exposure:
        include: '*'   #* 可以用来表示所有的端点,暴露所有的端点让

* 在YAML中有特殊的含义,所以如果想使用include或者exclude包含所有的端点时要加上双引号

5. 启动类上添加EnableDiscoveryClient 的注解

@EnableDiscoveryClient 开启服务的注册与发现功能

#创建控制器

这时启动你的项目你会发现你的nacos上出现了你的nacos-payment-provider

至此我们的服务者模块已经创建完毕!

6. 创建消费者模块,引入关键依赖

   <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <!-- 引入自己定义的api通用包,可以使用Payment支付Entity -->
        <dependency>
            <groupId>com.cy.springcloud</groupId>
            <artifactId>springCloud8081</artifactId>
            <version>1.0.0-SNAPSHOT</version>
        </dependency>
        #这个是你的服务者的模块,因为你需要用现在的消费者,调用你的服务者提供的接口

 #启动类添加@EnableDiscoveryClient注解

#修改配置文件

server:
  port: 83

spring:
  application:
    name: nacos-order-consumer
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848

#消费者将要去访问的微服务名称(注册成功进nacos的微服务提供者)
service-url:
  nacos-user-service: http://nacos-payment-provider

实现RestTemplate接口

#创建控制器

   @Resource
    private RestTemplate restTemplate;

    @Value("${service-url.nacos-user-service}")
    private String serverURL;

    @GetMapping(value = "/consumer/payment/nacos/{id}")
    public String paymentInfo(@PathVariable("id") Long id)
    {
        return restTemplate.getForObject(serverURL+"/payment/nacos/"+id,String.class);
    }

    //此时的return 调用restTemplate的接口去调用你提供的8080/payment/nacos接口,这个接口就是刚才写的服务者的接口

#此时我们访问消费者提供的接口!

使用了@LoadBalanced的作用

因为spring-cloud-starter-alibaba-nacos-discovery内含netflix-ribbon包

1.开启负载均衡的功能:开启负载均衡很简单,只需要在RestTemplate的bean上再添加一个@LoadBalanced注解即可。

2.由于加了@LoadBalanced注解,使用RestTemplateCustomizer对所有标注了@LoadBalanced的RestTemplate Bean添加了一个LoadBalancerInterceptor拦截器。利用RestTempllate的拦截器,spring可以对restTemplate bean进行定制,加入loadbalance拦截器进行ip:port的替换,也就是将请求的地址中的服务逻辑名转为具体的服务地址。

3、另外当spring容器中有多个相同类型的bean的时候,可以通过@LoadBalanced来进行区分,以便在注入的时候明确表明你要注入具体的哪个bean,消除歧义。

4、@LoadBalanced就是一个修饰符,和@Qualifier一样,标注了@Qualifier("invalid")的user bean都会自动注入到Bean、List和Map中去。

7. 配置nacos的namespace以及DataId

#  Nacos中的dataid的组成格式及与SpringBoot配置文件中的匹配规则

之所以需要配置spring.application.name,是因为它是构成Nacos配置管理dataId 字段的一部分。

${prefix}-${spring-profile.active}.${file-extension}

prefix默认为spring.application.name的值,也可以通过配置项spring.cloud.nacos.config.prefix来配置。
spring.profile.active即为当前环境对应的 profile,详情可以参考 Spring Boot文档。注意:当spring.profile.active为空时,对应的连接符 - 也将不存在,datald 的拼接格式变成${prefix}.${file-extension}
file-exetension为配置内容的数据格式,可以通过配置项spring .cloud.nacos.config.file-extension来配置。目前只支持properties和yaml类型。
通过Spring Cloud 原生注解@RefreshScope实现配置自动更新。
# 最后公式为:

${spring.application.name)}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}

修改配置文件

添加bootstrap,yml文件

# nacos配置
server:
  port: 3377

spring:
  application:
    name: nacos-config-client
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #Nacos服务注册中心地址
      config:
        server-addr: localhost:8848 #Nacos作为配置中心地址
        file-extension: yaml #指定yaml格式的配置
        group: DEV_GROUP
         namespace: 4460a2c1-eddf-4c49-98e8-2049159ea3a2
       


修改配置文件application.yml

spring:
  profiles:
    active: dev # 表示开发环境
    #active: test # 表示测试环境
    #active: info

 

 ps:自己懒得写了,直接拿的阳哥的图!

 

这个对应的就是你bootstrap里边的group,bootstrap里边你的file-extension是什么,你在nacos中 添加配置列表时就选择什么类型

你的bootstrap文件中的namespace就是你在命名空间中创建好的命名空间ID,这两个都可以作为你nacos查询配置的唯一标识。

测试

启动前需要在nacos客户端-配置管理-配置管理栏目下有对应的yaml配置文件
运行主启动类
调用接口查看配置信息 - http://localhost:3377/config/info
自带动态刷新修改下Nacos中的yaml配置文件,再次调用查看配置的接口,就会发现配置已经刷新。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值