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

阅读全文
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 排气系统故障灯亮怎么办 空调冷凝器坏了怎么办 水温空调不制冷怎么办 用冷风机屋里潮怎么办 空调制热不出水怎么办 空调水管堵了怎么办 空调制冷不出水怎么办 空调出风口漏水怎么办 空调管漏水厉害怎么办 电动车车速变慢怎么办 遥控器按钮掉了怎么办 苹果6屏幕凸起怎么办 三星笔记本开机黑屏怎么办 笔记本电脑开机黑屏怎么办三星 笔记本电脑黑屏怎么办灯是亮得 九代雅阁收音机信号不好怎么办 九代雅阁电瓶亏电怎么办 17款雅阁混动汽车胎压灯怎么办 空调制冷出热风怎么办 轿车方向机漏油怎么办 车钥匙感应不灵怎么办 汽车助力泵漏油怎么办 奔腾b70油耗高怎么办 方向机漏油了怎么办 威志油耗高怎么办 佳美2.4油耗大怎么办 笔记本电脑按键坏了怎么办 电视主板坏了怎么办 面包车电量亏电怎么办 自动挡汽车亏电怎么办 自动挡亏电了怎么办 面包车打不起火怎么办 汽车电瓶亏电怎么办 小车电池没电怎么办 汽车电瓶有电打不着火怎么办 汽车电瓶没电打不着火怎么办 汽车电池没电打不着火怎么办 汽车电瓶亏电打不着火怎么办 自动挡电瓶没电打不着火怎么办 自动挡车子没电打不着火怎么办 自动挡汽车没电打不着火怎么办