SpringCloud Alibaba - Ribbon消费Nacos Discovery服务

SpringCloud版本整合Eureka时可以很好的通过结合Ribbon + RestTemplate实例来共同完成服务调用的负载均衡,当然Nacos Discovery同样可以无缝的对接Ribbon来完成LoadBalance请求健康的服务地址。

Nacos Discovery内部默认集成了Ribbon,集成的方式跟Eureka几乎一致。

回顾

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

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

创建消费者应用

通过Idea开发工具创建一个SpringBoot项目,添加SpringCloudSpringCloud Alibaba相关版本依赖,pom.xml如下所示:

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
<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>
<!--nacos discovery-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</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>

application.yml

application.yml配置文件内添加Nacos Discovery相关的信息,如下所示:

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

服务发现

我们本章仍然使用ResteTemplate来访问服务地址,在入口类内添加如下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
@SpringBootApplication
@EnableDiscoveryClient
public class SpringCloudAlibabaNacosDiscoveryConsumerRibbonApplication {
/**
* logger instance
*/
static Logger logger = LoggerFactory.getLogger(SpringCloudAlibabaNacosDiscoveryConsumerRibbonApplication.class);

public static void main(String[] args) {
SpringApplication.run(SpringCloudAlibabaNacosDiscoveryConsumerRibbonApplication.class, args);
logger.info("「「「「「Nacos discovery consumer start successfully.」」」」」");
}

/**
* 实例化RestTemplate
*/
@Bean
@LoadBalanced
public RestTemplate restTemplate() {
return new RestTemplate();
}

}

@LoadBalanaced这个注解有学过SpringCloud的同学肯定是熟悉的,该注解开启RestTemplate使用Ribbon来做负载均衡

服务调用

创建一个名为ConsumerController的控制器,代码如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@RestController
public class ConsumerController {

@Autowired
private RestTemplate restTemplate;

/**
* ribbon方式消费请求路径
*
* @return
*/
@GetMapping(value = "/user/name")
public String ribbonConsumer() {
return restTemplate.getForObject("http://hengboy-sca-nacos-discovery-provider/user/name", String.class);
}
}

ConsumerController内注入RestTemplate来完成服务的调用,我们在调用服务时是通过服务名的方式来进行指定路径请求,Ribbon会自动根据hengboy-sca-nacos-discovery-provider服务名去Nacos Server拉取所有健康的服务列表,根据负载的策略来获取一个具体服务的ip + port再进行访问。

运行测试

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

该服务是上一章节SpringCloud Alibaba - Nacos Discovery 服务注册的源码,下载源码后可以直接运行。

第二步:启动本章应用
通过Application方式启动本章应用程序。

第三步:访问测试
通过命令curl http://localhost:9000/user/name访问,查看返回内容如下所示:

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

在访问地址时netflix提供的DynamicServerListLoadBalancer会自动进行负载,获取可用的服务地址,控制台日志信息如下:

1
2
3
2019-03-08 10:12:29.628  INFO 9777 --- [nio-9000-exec-2] c.n.l.DynamicServerListLoadBalancer      : DynamicServerListLoadBalancer for client hengboy-sca-nacos-discovery-provider initialized: DynamicServerListLoadBalancer:{NFLoadBalancer:name=hengboy-sca-nacos-discovery-provider,current list of Servers=[192.168.1.52:8080],Load balancer stats=Zone stats: {unknown=[Zone:unknown;	Instance count:1;	Active connections count: 0;	Circuit breaker tripped count: 0;	Active connections per server: 0.0;]
},Server stats: [[Server:192.168.1.52:8080; Zone:UNKNOWN; Total Requests:0; Successive connection failure:0; Total blackout seconds:0; Last connection made:Thu Jan 01 08:00:00 CST 1970; First connection made: Thu Jan 01 08:00:00 CST 1970; Active Connections:0; total failure count in last (1000) msecs:0; average resp time:0.0; 90 percentile resp time:0.0; 95 percentile resp time:0.0; min resp time:0.0; max resp time:0.0; stddev resp time:0.0]
]}ServerList:org.springframework.cloud.alibaba.nacos.ribbon.NacosServerList@d713121

代码示例

本章代码在源码的名称为:spring-cloud-alibaba-nacos-discovery-consumer-ribbon,在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

×