SpringCloud + Nacos 简单注册消费例子 | Feign调用

Posted 做猪呢,最重要的是开森啦

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringCloud + Nacos 简单注册消费例子 | Feign调用相关的知识,希望对你有一定的参考价值。

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与服务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结束~

以上是关于SpringCloud + Nacos 简单注册消费例子 | Feign调用的主要内容,如果未能解决你的问题,请参考以下文章

6.SpringCloud -- 注册中心与配置中心 Nacos网关 Gateway

超赞!用阿里开源的Nacos做SpringCloud注册中心真贴心...

SpringCloud Alibaba 使用Nacos作为服务注册中心讲解

SpringCloud Alibaba实战(7:nacos注册中心管理微服务)

微服务架构SpringBoot+SpringCloud+VUE三 || 服务注册与配置中心Nacos

springboot整合SpringCloud Nacos实现配置管理和服务发现