SpringCloud Alibaba - OpenFeign消费Nacos Discovery服务

openfeignSpringCloud的核心组件,在之前版本时使用netflix提供的feign比较多,后因开源问题被SpringCloud所替换。

两者的使用方式一致,下面我们通过本章的示例来讲解下openFeign如何消费Nacos Discovery提供的服务。

回顾

本系列为Nacos Discovery相关的教程,热门章节:

Nacos Config系列教程,请访问Nasoc-Config标签页面

创建应用

我们使用Idea开发工具创建SpringBoot项目,添加SpringCloudSpringCloud Alibaba相关的依赖内容如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
//...
<description>
使用OpenFeign消费Nacos Discovery服务
</description>

<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Greenwich.RELEASE</spring-cloud.version>
<spring-cloud-alibaba.version>0.2.1.RELEASE</spring-cloud-alibaba.version>
</properties>

<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<!--SpringCloud-->
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--SpringCloud Alibaba-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring-cloud-alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>

本章所使用的OpenFeign依赖为spring-cloud-starter-openfeign

application.yml

application.yml配置文件内添加如下内容:

1
2
3
4
5
6
7
8
9
10
11
# service instance name
spring:
application:
name: hengboy-sca-nacos-discovery-consumer-feign
# nacos discovery config
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
server:
port: 9100

开启OpenFeign

开启OpenFeign的方式很简单,仅需要一个注解就搞定了,我们在XxxApplication入口类内添加,如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/**
* nacos discovery consumer
*
* @author:恒宇少年 - 于起宇
* <p>
* DateTime:2019-03-08 13:20
* Blog:http://blog.yuqiyu.com
* WebSite:http://www.jianshu.com/u/092df3f77bca
* Gitee:https://gitee.com/hengboy
* GitHub:https://github.com/hengboy
*/
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class SpringCloudAlibabaNacosDiscoveryConsumerFeignApplication {

public static void main(String[] args) {
SpringApplication.run(SpringCloudAlibabaNacosDiscoveryConsumerFeignApplication.class, args);
}
}

我们只需要添加@EnableFeignClients注解就可以完成开启OpenFeign的配置导入。

OpenFeign服务定义

我们先来定义OpenFeign所调用的服务接口,如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/**
* 用户服务feign接口定义
*
* @author:恒宇少年 - 于起宇
* <p>
* DateTime:2019-03-08 13:20
* Blog:http://blog.yuqiyu.com
* WebSite:http://www.jianshu.com/u/092df3f77bca
* Gitee:https://gitee.com/hengboy
* GitHub:https://github.com/hengboy
*/
@FeignClient(name = "hengboy-sca-nacos-discovery-provider")
public interface UserService {
/**
* 获取用户名称
*
* @return
*/
@GetMapping(value = "/user/name")
String getName();
}

我们在SpringCloud Alibaba - Nacos Discovery 服务注册的服务名为hengboy-sca-nacos-discovery-provider,所以这里需要配置@FeignClient的值与服务名保持一致,告诉OpenFeign需要拉取具体哪个服务的实例列表

调用OpenFeign服务

@FeignClient会自动为接口生成代理的实现类,并且把实现类放入IOC内,我们只需要注入接口使用,为了方便测试,我们创建名为FeignConsumerController的控制器,如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
/**
* feign消费者控制器
*
* @author:恒宇少年 - 于起宇
* <p>
* DateTime:2019-03-08 13:23
* Blog:http://blog.yuqiyu.com
* WebSite:http://www.jianshu.com/u/092df3f77bca
* Gitee:https://gitee.com/hengboy
* GitHub:https://github.com/hengboy
*/
@RestController
public class FeignConsumerController {
/**
* 用户服务feign接口定义
*/
@Autowired
private UserService userService;

/**
* 调用feign接口
*
* @return
*/
@GetMapping(value = "/user/name")
public String getName() {
return userService.getName();
}
}

当我们访问/user/name地址时,就可以通过由OpenFeign代理的UserService来访问hengboy-sca-nacos-discovery-provider服务的请求。

运行测试

第一步:启动hengboy-sca-nacos-discovery-provider服务

hengboy-sca-nacos-discovery-providerSpringCloud Alibaba - Nacos Discovery 服务注册章节的源码,下载启动即可。

第二步:启动本章应用

通过Application方式启动本章应用项目。

第三步:访问/user/name

通过命令curl http://localhost:9100/user/name,返回内容如下所示:

1
2
➜  ~ curl http://localhost:9100/user/name
恒宇少年

代码示例

本章代码在源码的名称为:spring-cloud-alibaba-nacos-discovery-consumer-feign,在SpringCloud-Alibaba/Nacos-Discovery目录下。

  • MicroJob
    micro-job是一款分布式任务调度执行框架,用于集群环境负载均衡条件下的任务分发以及任务消费
    任务消费者节点定义任务 & 任务自动上报
    任务调度器自动根据负载均衡策略来选择不同的消费者节点进行任务消费

    点击查看MicroJob官方文档

下面的内容你感兴趣吗?

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×