概述
本文的参考资料:
spring cloud ribbon文档
方志明博客
Spring Cloud构建微服务架构(二)服务消费者
一、Ribbon简介
Ribbon是一个基于HTTP和TCP客户端的负载均衡器。Feign中也使用Ribbon,因此如果使用@FeignClient
注解就会使用Ribbon。
Ribbon的核心概念是client,每隔负载均衡是组件的一部分,同远程服务器一同工作,并且可以指定名称(例如通过@FeignClient注解)。
Spring Cloud使用
RibbonClientConfiguration为每个命名的客户端根据需要创建一个新的集合作为ApplicationContext。 这包含(其中包括)一个ILoadBalancer
,一个RestClient
和一个ServerListFilter
。
ribbon 已经默认实现了这些配置bean:
- IClientConfig
ribbonClientConfig: DefaultClientConfigImpl
- IRule
ribbonRule: ZoneAvoidanceRule
- IPing
ribbonPing: NoOpPing
- ServerList<Server>
ribbonServerList: ConfigurationBasedServerList
- ServerListFilter<Server>
ribbonServerListFilter: ZonePreferenceServerListFilter
- ILoadBalancer
ribbonLoadBalancer: ZoneAwareLoadBalancer
在Eureka服务下使用Ribbon
当Ribbon与Eureka联合使用时,ribbonServerList
会被DiscoveryEnabledNIWSServerList
重写,扩展成从Eureka注册中心中获取服务端列表。同时它也会用NIWSDiscoveryPing
来取代IPing
,它将职责委托给Eureka来确定服务端是否可用。
二、准备工作
- 启动服务注册中心Eureka-server工程
- 启动服务提供方eureka-client
- 将eureka-client的端口号修改为 8763,再启动一个服务
此时有eureka-client有两个服务在运行:
- http://127.0.0.1:8762/hello
- http://127.0.0.1:8763/hello
三、创建服务消费者
构建一个spring boot项目,pom.xml文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.orange</groupId>
<artifactId>ribbon</artifactId>
<version>0.0.1</version>
<packaging>jar</packaging>
<name>ribbon</name>
<description>Demo project for Spring Ribbon</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.7.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<spring-cloud.version>Dalston.SR3</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-ribbon</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>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
application.yml
文件中配置eureka服务注册中心:
spring:
application:
name: ribbon-consumer
server:
port: 8764
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
在应用主类中,通过@EnableDiscoveryClient
注解来添加发现服务能力。创建RestTemplate实例,并通过@LoadBalanced
注解开启均衡负载能力。
@EnableEurekaClient
@SpringBootApplication
public class RibbonApplication {
@Bean
@LoadBalanced
RestTemplate restTemplate() {
return new RestTemplate();
}
public static void main(String[] args) {
SpringApplication.run(RibbonApplication.class, args);
}
}
创建测试类HelloService和HelloController:
HelloService.java
@Service
public class HelloService {
@Autowired
RestTemplate restTemplate;
@RequestMapping(value = "/hello", method = RequestMethod.GET)
public String hello() {
return restTemplate.getForObject("http://EUREKA-CLIENT/hello", String.class);
}
}
HelloController.java
@RestController
public class HelloController {
@Autowired
private HelloService service;
@RequestMapping(value = "/hello", method = RequestMethod.GET)
public String hello() {
return service.hello();
}
}
启动该应用,访问http://localhost:8764/hello,页面交替出现
This is a Eureka client, from port: 8762
This is a Eureka client, from port: 8763
源码
https://gitee.com/tianqian/Springcloudlearn/tree/master/Chaper2/ribbon
最后
以上就是无情大门为你收集整理的Spring Cloud | 第二篇:服务消费者(Ribbon)的全部内容,希望文章能够帮你解决Spring Cloud | 第二篇:服务消费者(Ribbon)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复