Spring Cloud | 第二篇:服务消费者(Ribbon)
来源:互联网 发布:民国报纸数据库 编辑:程序博客网 时间:2024/06/14 08:31
本文的参考资料:
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-consumerserver: port: 8764eureka: client: serviceUrl: defaultZone: http://localhost:8761/eureka/
在应用主类中,通过@EnableDiscoveryClient
注解来添加发现服务能力。创建RestTemplate实例,并通过@LoadBalanced
注解开启均衡负载能力。
@EnableEurekaClient@SpringBootApplicationpublic class RibbonApplication { @Bean @LoadBalanced RestTemplate restTemplate() { return new RestTemplate(); } public static void main(String[] args) { SpringApplication.run(RibbonApplication.class, args); }}
创建测试类HelloService和HelloController:
HelloService.java
@Servicepublic 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
@RestControllerpublic 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: 8762This is a Eureka client, from port: 8763
源码
https://gitee.com/tianqian/Springcloudlearn/tree/master/Chaper2/ribbon
- Spring Cloud | 第二篇:服务消费者(Ribbon)
- 第二篇: 服务消费者(rest+ribbon)
- Spring Cloud(三)服务提供者 Eureka + 服务消费者(rest + Ribbon)
- [bigdata-109] spring-cloud-05 分布式服务的ribbon消费者
- SpringCloud 之第二篇: 服务消费者(rest+ribbon)
- SpringCloud教程 | 第二篇: 服务消费者(rest+ribbon)
- SpringCloud教程 | 第二篇: 服务消费者(rest+ribbon)
- SpringCloud 教程 | 第二篇: 服务消费者(rest+ribbon)
- SpringCloud教程第二篇:服务消费者(rest+ribbon)
- SpringCloud教程 | 第二篇: 服务消费者(rest+ribbon)
- 菜鸟之路spring cloud 学习|第二篇 服务消费者
- 第二章 Spring cloud 服务消费者
- Spring Cloud构建微服务架构(二)服务消费者(rest+ribbon)
- Spring Cloud Ribbon服务重试
- Spring Cloud 服务消费者
- Spring Cloud | 第三篇:服务消费者(Feign)
- 史上最简单的SpringCloud教程 | 第二篇: 服务消费者(rest+ribbon)
- 史上最简单的SpringCloud教程 | 第二篇: 服务消费者(rest+ribbon)
- Java基础之正则表达式
- 错误信息:ids for this class must be manually assigned before calling save(): sample.db.Completedsample
- 理想路径,P173Uva1599
- nginx concat模块安装配置
- flask 中使用 装饰器
- Spring Cloud | 第二篇:服务消费者(Ribbon)
- html5 postMessage解决跨域、跨窗口消息传递
- java多线程 关于synchronized wait notify CountDownLatch CyclicBarrier Semaphore
- 邂逅ReactNative(二):使用Eslint规范项目代码
- Spark 2.0从入门到精通245讲——操作RDD(transformation案例实战)
- java后台发送请求并获取返回值
- python 数值类型转换
- Ajax中什么时候用同步,什么时候用异步?
- 出现错误提示弹框: “Building workspace has encountered a problem. Errors during build.”