博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring cloud Ribbon + RestTemplate 实现负载均衡
阅读量:6301 次
发布时间:2019-06-22

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

  hot3.png

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

服务端代码 一:修改Build.gradle 文件

dependencies {    compile  "org.springframework.cloud:spring-cloud-starter-ribbon",             "org.springframework.cloud:spring-cloud-starter-netflix-eureka-client",             "org.springframework.boot:spring-boot-devtools",             "org.springframework.boot:spring-boot-starter-test"    testCompile 'org.springframework.boot:spring-boot-starter-test'}dependencyManagement {    imports {        mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"    }}

二:在项目启动类中,通过@EnableDiscoveryClient向服务中心注册;

@SpringBootApplication@EnableDiscoveryClientpublic class RibbonApplication {    public static void main(String[] args) {        SpringApplication.run(RibbonApplication.class, args);    }}

 

并且向程序的ioc注入一个bean: restTemplate;并通过@LoadBalanced注解表明这个restRemplate开启负载均衡的功能。

@Componentpublic class ServiceConfig {    @Bean    @LoadBalanced    public RestTemplate restTemplate(){        return new RestTemplate();    }}

在controller 抛出要访问得接口

@RestControllerpublic class ServerController {    @GetMapping("/hi/{name}")    public String sayHi(@PathVariable String name){        return "hello" + name + " 9334";    }}

 application-1.propertiese

spring.application.name=spring-cloud-ribbonserver.port=9333eureka.client.serviceUrl.defaultZone=http://localhost:8000/eureka/

 application-2.propertiese

spring.application.name=spring-cloud-ribbonserver.port=9334eureka.client.serviceUrl.defaultZone=http://localhost:8000/eureka/

三:启动eureka ,启动ribbon1,ribbon2, 在eureka 查看服务端是否已注册到服务中心, 并分别在浏览器访问接口地址 ,http://desktop-3aggf28:9334/hi/123,http://desktop-3aggf28:9333/hi/123 结果如下:

2f9a791693d4f3444759217f1f6a4a9c994.jpg

服务中心已注册

cbfed62005e3293e34b71be7c97a6154b7a.jpg

 

de306376f547604601fefe5d7856dfdf5dd.jpg

 

服务端已实现完毕---------

客户端代码如下:

一:修改Build.gradle

dependencies {    compile  "org.springframework.cloud:spring-cloud-starter-ribbon",             "org.springframework.cloud:spring-cloud-starter-netflix-eureka-client",             "org.springframework.cloud:spring-cloud-starter-netflix-ribbon",             "org.springframework.boot:spring-boot-devtools",             "org.springframework.boot:spring-boot-starter-test"}dependencyManagement {    imports {        mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"    }}

二:编写controller,service, 开启restTemplate ,修改启动类

@Componentpublic class ServiceConfig {    @Bean    @LoadBalanced    public RestTemplate restTemplate(){        return new RestTemplate();    }}

restTemplate 访问得地址是服务端配置文件配置得项目名称,

@Componentpublic class HiService {    @Autowired    RestTemplate restTemplate;    public String hiService(String name) {        return restTemplate.getForObject("http://SPRING-CLOUD-RIBBON/hi/" + name,String.class);    }}

controller 代码一样

@RestControllerpublic class ClientController {    @Autowired    HiService hiService;    @GetMapping(value = "/hi/{name}")    public String hiService(@PathVariable String name) {        return hiService.hiService( name );    }}

启动类 注册到服务中心

@SpringBootApplication@EnableEurekaClient@EnableDiscoveryClientpublic class RibbonClientApplication {    public static void main(String[] args) {        SpringApplication.run(RibbonClientApplication.class, args);    }}

application.properties

spring.application.name=service-clientserver.port=9555eureka.client.serviceUrl.defaultZone=http://localhost:8000/eureka/

客户端代码完毕 

启动客户端项目,访问注册中心看是否发现客户端已注册,并通过访问客户端接口来观察是否服务端实现负载均衡 ,多次刷新返回结果如下,证明服务端已实现负载均衡,轮询执行

6ef158e1537724496eb07ece05bdccf4def.jpg

4506d93de55e9ae3a5046738366fe220bbf.jpg

 

代码地址 :https://gitee.com/gavinmars/ribbon-server.git,https://gitee.com/gavinmars/ribbon-client.git

 

转载于:https://my.oschina.net/cpy/blog/3003355

你可能感兴趣的文章
android分析之mutex
查看>>
BZOJ4597:[SHOI2016]随机序列——题解
查看>>
计算机学科技术前沿:1.我对摩尔定律的理解
查看>>
openStack CI(Continuous interaction)/CD(Continuous delivery) Gerrit/Jenkins安装及集成,插件配置...
查看>>
[转载]SharePoint 2013测试环境安装配置指南
查看>>
分布式全局ID生成器设计
查看>>
微服务学习笔记一:Spring Cloud简介
查看>>
【翻译】使用新的Sencha Cmd 4命令app watch
查看>>
【前台】【单页跳转】整个项目实现单页面跳转,抛弃iframe
查看>>
因为你是前端程序员!
查看>>
数据库设计中的14个技巧
查看>>
Android学习系列(5)--App布局初探之简单模型
查看>>
git回退到某个历史版本
查看>>
ecshop
查看>>
HTML5基础(二)
查看>>
在GCE上安装Apache、tomcat等
查看>>
在Mac 系统下进行文件的显示和隐藏
查看>>
ue4(c++) 按钮中的文字居中的问题
查看>>
技能点
查看>>
javascript——BOM的open()和close()
查看>>