SpringCloud + Nacos 简单注册消费例子 | Feign调用 | 命名空间namespace

0. 栗子代码仓:

https://github.com/OooooOz/springcloude-nacos-example

1. Nacos本地环境搭建及启动
 1.1. Nacos下载

下载链接:Linux下载第一个,windows下载第二个

在这里插入图片描述

 1.2. Nacos启动
  • 解压后进入bin目录,地址栏执行cmd
  • 执行命令:startup.cmd -m standalone
  • 上述命令的standalone表示单机启动,集群的配置自行百度

在这里插入图片描述

 1.3. Nacos访问控制台页面:

 访问上述地址,或者http://localhost:8848/nacos  默认账号/密码:nacos/nacos

在这里插入图片描述

2. 项目框架依赖说明:
  • SpringBoot版本:2.3.2.RELEASE
  • SpringCloud版本:Hoxton.SR8
  • Spring-Cloud-Alibaba版本:2.2.5.RELEASE
  • Spring Cloud Alibaba的相关介绍可以参考链接:Spring Cloud Alibaba介绍 ;下图是推荐的版本依赖关系:

在这里插入图片描述

 2.1. naocs主要依赖:
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
            <version>${spring-cloud-alibaba-dependencies}</version>
        </dependency>

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>${spring-cloud-alibaba-dependencies}</version>
        </dependency>
3. 提供者代码说明:
 3.1. bootstrap.yaml:
spring:
  # 项目名称,默认情况下Nacos中配置需要和这个保持一致
  application:
    name: provider
  cloud:
    nacos:
      # 配置
      config:
        # Nacos地址
        server-addr: 127.0.0.1:8848
      # 发布服务时需要加上这个,不然Nacos无法监听到
      discovery:
        # Nacos地址
        server-addr: 127.0.0.1:8848
server:
  port: 8080

 3.2. 提供者Controller:

 ${name}取的是nacos配置管理的值,下文第3.3节会有配置

@RequestMapping("/provider")
@RestController
class ProviderController {

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

    @NacosInjected
    private NamingService namingService;

    @Autowired
    private NacosServiceManager nacosServiceManager;

    @Autowired
    private NacosDiscoveryProperties nacosDiscoveryProperties;

    @GetMapping("/getValue")
    public String getValue(){
        return "[name: " + name + "]";
    }


    @RequestMapping(value = "/getService", method = GET)
    public List<Instance> get(@RequestParam String serviceName) throws NacosException {
        // namingService注入为null,采用nacosServiceManager获取namingService注入为null
        namingService =  nacosServiceManager.getNamingService(nacosDiscoveryProperties.getNacosProperties());
        return namingService.getAllInstances(serviceName);
    }
}
 3.3. nacos配置管理配置:

 访问控制台 – 配置管理 – 添加配置

在这里插入图片描述

Data ID对应的完整配置如下:

在这里插入图片描述

  • 此处Data ID与服务spring.service.name一致;Group为默认即可
  • 配置格式为yaml,本栗子只配置name: zhangsan,配置完成发布即可

在这里插入图片描述

 3.4. 启动提供者:

 启动提供者的启动类,访问接口:http://localhost:8080/provider/getValue

在这里插入图片描述

 查看nacos控制台,服务列表,可见提供者注册上去了

在这里插入图片描述

4. 消费者代码说明:

 消费者调用提供者的getValue接口,可以使用RestTemplate或者Feign来调用

 4.1. 补充openfeign依赖:

在消费者的pom,下添加如下依赖:

	 <!--服务调用-->
	 <dependency>
	     <groupId>org.springframework.cloud</groupId>
	     <artifactId>spring-cloud-starter-openfeign</artifactId>
	 </dependency>
 4.2. 创建提供者的Feign接口:

 注释的内容是相对应的,如果@FeignClient中值与spring.service.name对应;不使用url时,Mapping路径为提供者的接口全路径

@FeignClient("provider")
//@FeignClient(name = "provider",url = "http://localhost:8080/provider")
public interface ProviderClient {

    @GetMapping("/provider/getValue")
//    @GetMapping("/getValue")
    String getValue();
}
 4.3. 消费者Controller:

 直接注入Feign接口调用接口即可,会匹配到注册到nacos的提供者接口

@RequestMapping("/consumer")
@Controller
class ConsumerController {

    @Autowired
    ProviderClient providerClient;

    @GetMapping("/getValue")
    @ResponseBody
    public String getValue(){
        RestTemplate restTemplate = new RestTemplate();
        String forObject = restTemplate.getForObject("http://127.0.0.1:8080/provider/getValue", String.class);
        System.out.println("------------getValue消费者-------------------");
        return forObject;
    }
    @GetMapping("/getFeignValue")
    @ResponseBody
    public String getFeignValue(){
        System.out.println("------------getFeignValue消费者-------------------");
        return providerClient.getValue();
    }
}
 4.4. 消费者启动类:

 消费者启动类添加@EnableFeignClients注解:

在这里插入图片描述

 启动消费者启动类,访问消费者接口:http://localhost:8081/consumer/getFeignValue  idea控制台有输出,有返回值

在这里插入图片描述

同样,在nacos控制台的服务列表,消费者也注册上去

在这里插入图片描述

本栗子简单的demo结束~

5. 命名空间namespace:

Nacos提供了namespace来实现环境隔离功能,每个空间里面的配置是独立的 (默认是 public)

命名空间下还有组Group和Service等隔离手段

在这里插入图片描述

 5.1. 创建命名空间namespace:

创建一个dev开发环境:

在这里插入图片描述

 5.2. 创建配置数据:

像3.3一样,为dev空间进行配置管理,这里面配置了name: zhangsan-dev

在这里插入图片描述

 5.3. 代码yaml配置命名空间namespace:
  • 在代码yml文件配置namespace,值为命名空间id,
# 提供者的yml文件配置
spring:
  # 项目名称,默认情况下Nacos中配置需要和这个保持一致
  application:
    name: provider
  cloud:
    nacos:
      # 配置
      config:
        # Nacos地址
        server-addr: 127.0.0.1:8848
        namespace: a0d85536-6299-4e36-93bf-bfd567c765ca  # 命名空间,填ID
      # 发布服务时需要加上这个,不然Nacos无法监听到
      discovery:
        # Nacos地址
        server-addr: 127.0.0.1:8848
        cluster-name: SZ  # 集群名称
        namespace: a0d85536-6299-4e36-93bf-bfd567c765ca  # 命名空间,填ID
server:
  port: 8080
# 消费者的yml
spring:
  application:
    name: consumer
  cloud:
    nacos:
      # 配置
      config:
        # Nacos地址
        server-addr: 127.0.0.1:8848
      # 发布服务时需要加上这个,不然Nacos无法监听到
      discovery:
        # Nacos地址
        server-addr: 127.0.0.1:8848
        cluster-name: SZ  # 集群名称
        namespace: a0d85536-6299-4e36-93bf-bfd567c765ca  # 命名空间,填ID
        register-enabled: false  # 只消费不注册
server:
  port: 8081
  • 如果只读取配置值,那么只在config进行配置namespace即可,如果还有进行服务发现,则discovery也需要配置
  • 像提供者Controller中要读取了配置name,也要给消费者消费,就要都配置
  • 而消费者是并不需要读取配置的值,需要掉提供者进行服务发现,所以一定要在discovery配置namespace
  • 一般二者都添加

 启动消费者启动类,访问消费者接口:http://localhost:8081/consumer/getFeignValue  返回dev环境的配置值

在这里插入图片描述

6. 消费者只进行消费,而不注册
  • 很多时候,我们本地调用线上稳定环境进行调试,我们是不应该把本地的服务注册上去的,避免线上服务调用到本地
  • 这时,我们需要在消费者增加spring.cloud.nacos.discovery.register-enabled为false,见上述5.3配置文件
  • 这时,我们能正常调用提供者接口,但并没有注册到nacos上,如下图(可对比4.4):

在这里插入图片描述

7. 订阅者

这里的消费者并不是就是指消费者,具体可以百度了解

  • 点击上图订阅者,需要在消费者配置jvm启动参数-Dproject.name=“ConsumerApplication”,才会识别,不然是unknown

在这里插入图片描述

在这里插入图片描述

8. 集群权重:
  • 有些机器性能较好,处理较快,这时我们希望更多的请求在性能较好的实例中处理,
  • Nacos提供了权重配置来控制访问频率,权重越大则访问频率越高。
  • 点击6图中的详情,进行权重编辑;此处也可以对服务进行下线,比如本地服务注册上去了,就下线它:

在这里插入图片描述

9. @RefreshScope 实现配置自动更新:
  • 在nacos配置中心更改了配置值,添加该注解,服务就可以很快感知到配置修改,进而读取最新配置值,具体原理感兴趣可以百度

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值