当前位置: 首页 > news >正文

Spring Cloud构建微服务架构—服务消费(Ribbon)

Spring Cloud Ribbon

Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡的工具。它是一个基于HTTP和TCP的客户端负载均衡器。它可以通过在客户端中配置ribbonServerList来设置服务端列表去轮询访问以达到均衡负载的作用。Spring Cloud大型企业分布式微服务云架构源码请加企鹅求求一七九一七四三三八零

当Ribbon与Eureka联合使用时,ribbonServerList会被DiscoveryEnabledNIWSServerList重写,扩展成从Eureka注册中心中获取服务实例列表。同时它也会用NIWSDiscoveryPing来取代IPing,它将职责委托给Eureka来确定服务端是否已经启动。

而当Ribbon与Consul联合使用时,ribbonServerList会被ConsulServerList来扩展成从Consul获取服务实例列表。同时由ConsulPing来作为IPing接口的实现。

我们在使用Spring Cloud Ribbon的时候,不论是与Eureka还是Consul结合,都会在引入Spring Cloud Eureka或Spring Cloud Consul依赖的时候通过自动化配置来加载上述所说的配置内容,所以我们可以快速在Spring Cloud中实现服务间调用的负载均衡。

下面我们通过具体的例子来看看如何使用Spring Cloud Ribbon来实现服务的调用以及客户端均衡负载。

下面的例子,我们将利用之前构建的eureka-server作为服务注册中心、eureka-client作为服务提供者作为基础。而基于Spring Cloud Ribbon实现的消费者,我们可以根据eureka-consumer实现的内容进行简单改在就能完成,具体步骤如下:

根据eureka-consumer复制一个服务消费者工程,命名为:eureka-consumer-ribbon。在pom.xml中增加下面的依赖:

<dependencies>
...
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-ribbon</artifactId>
</dependency>
</dependencies>
复制代码

修改应用主类。为RestTemplate增加@LoadBalanced注解:

@EnableDiscoveryClient
@SpringBootApplication
public class Application {
@Bean
@LoadBalanced
public RestTemplate restTemplate() {
return new RestTemplate();
}
public static void main(String[] args) {
new SpringApplicationBuilder(Application.class).web(true).run(args);
}
}
复制代码

修改Controller。去掉原来通过LoadBalancerClient选取实例和拼接URL的步骤,直接通过RestTemplate发起请求。

@RestController
public class DcController {
@Autowired
RestTemplate restTemplate;
@GetMapping("/consumer")
public String dc() {
return restTemplate.getForObject("http://eureka-client/dc", String.class);
}
}
复制代码

可以看到这里,我们除了去掉了原来与LoadBalancerClient相关的逻辑之外,对于RestTemplate的使用,我们的第一个url参数有一些特别。这里请求的host位置并没有使用一个具体的IP地址和端口的形式,而是采用了服务名的方式组成。那么这样的请求为什么可以调用成功呢?因为Spring Cloud Ribbon有一个拦截器,它能够在这里进行实际调用的时候,自动的去选取服务实例,并将实际要请求的IP地址和端口替换这里的服务名,从而完成服务接口的调用。

在完成了上面你的代码编写之后,读者可以将eureka-server、eureka-client、eureka-consumer-ribbon都启动起来,来跟踪观察eureka-consumer-ribbon服务是如何消费eureka-client服务的/dc接口的,并且也可以通过启动多个eureka-client服务来观察其负载均衡的效果。

相关文章:

  • long a = 136;
  • 使用权重正则化较少模型过拟合
  • Angular 响应式表单之下拉框
  • 基于 Babel 的 npm 包最小化设置
  • 洞悉物联网发展1000问之热点技术这么多,物联网的机会在哪里?
  • 另人的评测
  • vue 组件中solt 插槽使用
  • 设计模式(三)Animation中的策略模式
  • 手写springmvc框架
  • 你炒的肉丝为何又柴又老又难吃?
  • 刷新三观的几个网站,个个超厉害
  • 解决在V2.0中子组件使用v-model接收来自父组件的值异常
  • 商城系统 DBShop V1.3 Release 20190309 发布
  • HCL远程登陆(telnet)
  • 大数据会取代传统BI吗
  • Apache Spark Streaming 使用实例
  • LeetCode18.四数之和 JavaScript
  • mac修复ab及siege安装
  • npx命令介绍
  • react-core-image-upload 一款轻量级图片上传裁剪插件
  • Redis在Web项目中的应用与实践
  • supervisor 永不挂掉的进程 安装以及使用
  • 大快搜索数据爬虫技术实例安装教学篇
  • 设计模式(12)迭代器模式(讲解+应用)
  • 世界上最简单的无等待算法(getAndIncrement)
  • 学习HTTP相关知识笔记
  • #我与Java虚拟机的故事#连载01:人在JVM,身不由己
  • #我与Java虚拟机的故事#连载08:书读百遍其义自见
  • (附程序)AD采集中的10种经典软件滤波程序优缺点分析
  • (简单) HDU 2612 Find a way,BFS。
  • (四)Android布局类型(线性布局LinearLayout)
  • .NET Core使用NPOI导出复杂,美观的Excel详解
  • .NET Entity FrameWork 总结 ,在项目中用处个人感觉不大。适合初级用用,不涉及到与数据库通信。
  • .net 中viewstate的原理和使用
  • .NET简谈互操作(五:基础知识之Dynamic平台调用)
  • .NET中两种OCR方式对比
  • ??在JSP中,java和JavaScript如何交互?
  • @LoadBalanced 和 @RefreshScope 同时使用,负载均衡失效分析
  • [ NOI 2001 ] 食物链
  • [ 渗透工具篇 ] 一篇文章让你掌握神奇的shuize -- 信息收集自动化工具
  • [2013AAA]On a fractional nonlinear hyperbolic equation arising from relative theory
  • [BJDCTF 2020]easy_md5
  • [C#]winform部署PaddleOCRV3推理模型
  • [c++] 什么是平凡类型,标准布局类型,POD类型,聚合体
  • [DAX] MAX函数 | MAXX函数
  • [DM复习]关联规则挖掘(下)
  • [Firefly-Linux] RK3568 pca9555芯片驱动详解
  • [HTML]Web前端开发技术18(HTML5、CSS3、JavaScript )HTML5 基础与CSS3 应用——喵喵画网页
  • [LeetCode] 93. Restore IP Addresses 复原IP地址
  • [linux] C语言Linux系统编程进程基本概念
  • [linux学习]apt-get参数解析
  • [LOJ 6213]「美团 CodeM 决赛」radar
  • [Lua实战]整理Lua中忽略的问题
  • [MZ test.16]P2 math 乘方e
  • [root]既然sudo 可以暂时获取root权限,那么为何还需要root这个用户呢