SpringCloud + Nacos 简单注册消费例子 | Feign调用
Posted 做猪呢,最重要的是开森啦
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringCloud + Nacos 简单注册消费例子 | Feign调用相关的知识,希望对你有一定的参考价值。
0. 栗子代码仓:
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注册中心管理微服务)