nacos使用

先说一个知识点,springboot配置文件加载顺序
bootstrap.properties --> bootstrap.yml -->
application.properties --> application.yml
其中bootstrap.properties一定会加载,我们打包后分渠道启动的时候,可以给不同渠道配置文件后面加上“-渠道名”
启动jar包的时候添加“–spring.profiles.active=渠道名”方式启动
例如 我们配置测试环境(test)和开发环境(dev)的bootstrap.properties
可以写成bootstrap-dev.properties,bootstrap-test.properties

jar包启动的命令:

# 启动开发环境
java -jar 你的jar包.jar --spring.profiles.active=dev
# 启动测试环境
java -jar 你的jar包.jar --spring.profiles.active=dev

如果在idea中直接启动,可配置启动参数
在这里插入图片描述

安装

官网
这里我使用docker 安装
注意:我们启动容器的时候加上 -d 让容器在后台运行

安装之后,通过ip+端口的方式访问
http://你的ip地址:8848/

在这里插入图片描述

spring cloud注册服务提供者

官网介绍

  1. 添加依赖,这里我使用的是2.2.0.RELEASE

    <!--nacos 服务注册与发现-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
                <version>2.2.0.RELEASE</version>
            </dependency>
    
  2. 配置 Nacos server 的地址和应用名

    spring:
      # nacos 中的服务名
      application:
        name: banner
      # nacos注册中心地址
      cloud:
        nacos:
          discovery:
            server-addr: 47.105.148.35:8848
    # 这里我多增加了一个属性后面测试用例中使用
    app:
      name: banner
    
  3. @SpringBootApplication注解上方添加注解

    // 开启服务注册发现功能
    @EnableDiscoveryClient
    
  4. 提供给一个controller方法,供他人调用

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping(value = "/banner")
public class BananerContorller {

    @Value("${app.name}")
    private String appName;

    @GetMapping("/getAppName")
    public String getAppName(){
        return "my appName is :  "+appName;
    }
}

启动工程后可以通过http://localhost:8080/banner/getAppName调用方法

启动工程后可以在nacos控制台中看到
在这里插入图片描述

spring cloud使用服务消费者
  1. 添加feign注解,我这里使用2.2.2.RELEASE版本
        <!--服务消费者使用的feign-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
            <version>2.2.2.RELEASE</version>
        </dependency>
  1. @SpringBootApplication注解上方添加注解@EnableFeignClients

  2. 编写一个service接口调用banner工程的方法,

    import org.springframework.cloud.openfeign.FeignClient;
    import org.springframework.web.bind.annotation.GetMapping;
    // banner工程的工程名
    @FeignClient(name="banner")
    public interface IBannerService {
        // banner工程中的调用路径
        @GetMapping(value="/banner/getAppName")
        public String getAppName();
    }
    
  3. 编写一个controller 调用service接口

    import com.sb.mbp.service.IBannerService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    public class FeignController {
    
        @Autowired
        private IBannerService iBannerService;
    
        @GetMapping("/getBannerAppName")
        public String getBannerAppName(){
            return iBannerService.getAppName();
        }
    }
    

启动之后,通过ip+端口+/getBannerAppName的方式请求一下。能收到banner工程/banner/getAppName接口的返回值

使用配置中心读取动态参数

这里我们以banner工程为例进行添加

在nocos中添加配置:
在这里插入图片描述
这里我使用yaml格式的文件
在这里插入图片描述

工程中使用:

  1. 添加依赖
            <!--接入配置中心-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
                <version>2.2.0.RELEASE</version>
            </dependency>
    
  2. 在bootstrap.properties中添加配置中心
# canos中配置文件的id
spring.application.name=banner-config
spring.cloud.nacos.config.server-addr=canos机器的ip:8848
# 配置文件类型
spring.cloud.nacos.config.file-extension=yaml
  1. 添加注解@RefreshScope
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
// 动态参数注解
@RefreshScope
@RestController
@RequestMapping(value = "/banner")
public class BananerContorller {

    @Value("${app.name}")
    private String appName;

    @GetMapping("/getAppName")
    public String getAppName(){
        return "my appName is :  "+appName;
    }
}

启动工程后我们请求接口,能获取到配置文件中的app.name。不用重启工程, 直接修改canos中的值,再次请求接口也能获取到变化后的值

多环境配置

我们可以在canos中配置同一工程的不同环境的配置,通过Data Id后面添加 -渠道的方式
像这样之前的配置是:banner-config.yaml,可以添加测试环境配置banner-config-test.yaml,生产环境banner-config-prod.yaml
在这里插入图片描述
在bootstrap.properties中多添加一个配置指定使用的后缀
例如下面的配置对应canos配置文件的id是:banner-config-test.yaml

spring.profiles.active=test
spring.application.name=banner-config
spring.cloud.nacos.config.server-addr=canosip:8848
spring.cloud.nacos.config.file-extension=yaml
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值