博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SpringCloud |第二篇: 服务消费者(Ribbon)
阅读量:6721 次
发布时间:2019-06-25

本文共 4089 字,大约阅读时间需要 13 分钟。

hot3.png

一、Ribbon简介

    Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法,将Netflix的中间层服务连接在一起。Ribbon客户端组件提供一系列完善的配置项如连接超时,重试等。简单的说,就是在配置文件中列出Load Balancer后面所有的机器,Ribbon会自动的帮助你基于某种规则(如简单轮询,随即连接等)去连接这些机器。我们也很容易使用Ribbon实现自定义的负载均衡算法。

二、准备工作

    这一篇文章基于上一篇文章的工程,启动eureka-server 工程;启动user-service工程,它的端口为8084;将user-service的项目复制出来一个将其名称修改为user-service1,配置文件的端口改为8085.

113323_eYOy_2940767.png 113349_uV3P_2940767.png

113221_KIPa_2940767.png 113243_Jrjg_2940767.png

启动,这时你会发现:user-service在eureka-server注册了2个实例,这就相当于一个小的集群。访问localhost:1001如图所示:

113523_vLjg_2940767.png

三、建一个服务消费者(Ribbon)

    重新新建一个工程,取名为:da-ribbon-service; 

113939_Tk8h_2940767.png

    在它的pom.xml文件分别引入起步依赖spring-boot-starter-web,代码如下:

4.0.0
com.example
da-ribbon-server
0.0.1-SNAPSHOT
jar
da-ribbon-server
Demo project for Spring Boot
org.springframework.boot
spring-boot-starter-parent
2.0.0.RELEASE
UTF-8
UTF-8
1.8
Finchley.M8
org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
org.springframework.cloud
spring-cloud-starter-netflix-ribbon
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-test
test
org.springframework.cloud
spring-cloud-dependencies
${spring-cloud.version}
pom
import
org.springframework.boot
spring-boot-maven-plugin
spring-milestones
Spring Milestones
https://repo.spring.io/milestone
false

    在工程的配置文件指定服务的注册中心地址为http://localhost:1001/eureka/,程序名称为 ribbon-service,程序端口为2001。配置文件application.yml如下:

eureka:  client:    serviceUrl:      defaultZone: http://localhost:1001/eureka/  instance:    lease-renewal-interval-in-seconds: 30server:  port: 2001spring:  application:    name: ribbon-service

    在工程的启动类中,通过@EnableEurekaClient向服务中心注册;并且向程序的ioc注入一个bean: restTemplate;并通过@LoadBalanced注解表明这个restRemplate开启负载均衡的功能。

@EnableEurekaClient@SpringBootApplicationpublic class DaRibbonServerApplication {	public static void main(String[] args) {		SpringApplication.run(DaRibbonServerApplication.class, args);	}	@Bean	@LoadBalanced	RestTemplate restTemplate(){		return restTemplate();	}}

写一个测试类HelloService,通过之前注入ioc容器的restTemplate来消费service-hi服务的“/hi”接口,在这里我们直接用的程序名替代了具体的url地址,在ribbon中它会根据服务名来选择具体的服务实例,根据服务实例在请求的时候会用具体的url替换掉服务名,代码如下:

@Servicepublic class HelloService {    @Autowired    RestTemplate restTemplate;    public String getHello(String name){        return restTemplate.getForObject("http://user-service/hi?name="+name,String.class);    }}

写一个controller,在controller中用调用HelloService 的方法,代码如下:

@RestControllerpublic class HiController {    @Autowired    HelloService helloService;    @RequestMapping("/hi")    public String hi(@RequestParam String name){        return helloService.getHello(name);    }}

在浏览器上多次访问http://localhost:2001/hi?name=zhangsan,浏览器交替显示:

135210_fUhV_2940767.png

135222_bkJJ_2940767.png

这说明当我们通过调用restTemplate.getForObject("http://user-service/hi?name="+name,String.class)方法时,已经做了负载均衡,访问了不同的端口的服务实例。

四、此时的架构

  • 一个服务注册中心,eureka-server,端口为1001
  • user-service跑了两个工程实例,端口分别为8084,8085,分别向服务注册中心注册
  • ribbon-sercvice端口为2001,向服务注册中心注册
  • 当ribbon-sercvice通过restTemplate调用user-service的hi接口时,因为用ribbon进行了负载均衡,会轮流的调用user-service:8084和8085 两个端口的hi接口;

五、源码下载

    RibbonServer源码下载:

    UserServer1源码下载:

转载于:https://my.oschina.net/Clarences/blog/1635795

你可能感兴趣的文章
使用C++和DirectX开发游戏GUI(三)
查看>>
我的WCF之旅(5):面向服务架构(SOA)和面向对象编程(OOP)的结合——如何实现Service Contract的重载(Overloading)...
查看>>
Mellanox:一切以数据为中心 重构网络世界
查看>>
2013年首次亮相的RoboBee,如今却能”上天入海“
查看>>
在Docker里运行Ceph
查看>>
这里有一份面筋请查收(五)
查看>>
Java中的匿名对象
查看>>
最新发布:数据库防火墙技术市场调研报告
查看>>
AI如何为安防赋能?具体场景案例解析
查看>>
揭秘“史上最严高考”背后的高科技手段
查看>>
百分点:在线旅游阿里去啊购买转化最高
查看>>
“互联网+”改变传统教育模式
查看>>
阿里巴巴发布物联网平台:不止互动 更能互懂
查看>>
威胁情报工具:更快?更聪明?
查看>>
荷兰Serverius数据中心如何逆袭运营困境
查看>>
移动后端即服务带给我们什么?
查看>>
JS的运行机制
查看>>
PyCharm - Linux下最好的Python IDE
查看>>
NB-IoT来了!网络还差两个月启用,芯片和平台已经准备好了
查看>>
卢东:智能路由,家庭的数据中心
查看>>