通过Feign消费注册在Nacos上面的服务
Spring Boot版本:2.2.9.RELEASE Spring Cloud Alibaba版本:2.2.1.RELEASE nacos版本:1.3.1 spring-cloud-starter-openfeign版本:2.2.3.RELEASE
0 准备
首先根据 搭建注册一个discoveryServer服务。
1 引入依赖
首先引入相关依赖:
<!-- nacos服务注册与发现 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- spring cloud openfeign依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!-- 负载均衡 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
<!-- 单元测试 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
最主要的依赖是spring-cloud-starter-openfeign。
当然,为了能够通过服务名发现注册到Nacos的服务,所以需要引入spring-cloud-starter-alibaba-nacos-discovery;为了使用Spring官方的负载均衡器来替换Ribbon,需要引入spring-cloud-starter-loadbalancer,并添加配置spring.cloud.loadbalancer.ribbon.enabled=false;单元测试需要引入spring-boot-starter-test。
application.properties配置文件如下:
# 服务名、端口、上下文 spring.application.name=discoveryClient server.servlet.context-path=/dc server.port=8080 # nacos服务器的地址 spring.cloud.nacos.discovery.server-addr=192.168.225.128:8848 # 不使用RibbonLoadBalancerClient,改用BlockingLoadBalancerClient spring.cloud.loadbalancer.ribbon.enabled=false
2 启用Feign
在启动类上添加@EnableFeignClients注解:
@EnableFeignClients
@EnableDiscoveryClient
@SpringBootApplication
public class NacosDiscoveryClientApplication {
public static void main(String[] args) {
SpringApplication.run(NacosDiscoveryClientApplication.class, args);
}
}
3 编写接口
编写一个接口叫做IDiscoveryServer,代表注册到Nacos注册中心的服务discoveryServer。
@FeignClient("discoveryServer")
@RequestMapping("/ds")
public interface IDiscoveryServer {
@GetMapping("/hello")
String hello();
}
在这个接口里:
-
使用@FeignClient注解表示这是一个Feign客户端,参数填服务名,也就是注册到Nacos中心的服务discoveryServer。 和编写web里面的Controller一样,可以使用@RequestMapping、@GetMapping这样的注解标示请求的uri。 这里的hello()方法经过Feign的处理,最后会变成http://discoveryServer/ds/hello的一个http请求。
4 验证
编写单元测试验证:
@SpringBootTest
public class MainTest {
@Autowired
private IDiscoveryServer discoveryServer;
@Test
public void hello() {
System.out.println(discoveryServer.hello());;
}
}
输出为:
hello, I am discoveryServer, port is [8001]
下一篇:
使用Hystrix实现容错处理
