springcloud微服务架构开发实战:常见微服务的消费者

常见微服务的消费者本节就常见的微服务的消费者进行介绍 。在JAVA领域比较常用的消费者框架主要有HttpClient、Ribbon、Feign 等 。

springcloud微服务架构开发实战:常见微服务的消费者

文章插图
 
Apache HttpClientApache HttpClient是Apache Jakarta Common下的子项目 , 用来提供高效的、最新的、功能丰富的支持HTTP的客户端编程工具包 , 并且它支持HTTP最新的版本和建议 。虽然在JDK的java.net包中已经提供了访问HTTP的基本功能 , 但是对于大部分应用程序来说 , JDK 库本身提供的功能还不够丰富和灵活 。HttpClient 相比传统JDK自带的URLConnection,增加了易用性和灵活性 , 它不仅使客户端发送Http请求变得容易 , 而且也方便了开发人员测试基于HTTP的接口 , 既提高了开发的效率 , 也方便提高代码的健壮性 。
在之前章节的示例中 , 我们也大规模采用了HttpClient来作为REST客户端 。
在程序中 , 我们经常使用RestTemplate实例来访问REST服务 。RestTemplate 是Spring的核心类 , 用于同步客户端的HTTP访问 。它简化了与HTTP服务器的通信 , 并强制执行RESTful原则 。
默认情况下 , RestTemplate 依赖于标准的JDK功能来建立HTTP连接 , 当然 , 我们也可以通过setRequestFactory属性来切换到使用不同的HTTP库 , 例如 , 上面我们所介绍的Apache HttpCli-ent, 以及其他的 , 如Netty、OkHtp等 。
要使用Apache HttpClient,最方便的方式莫过于再添加Apache HttpClient依赖 。
//依赖关系dependencies {//添加Apache HttpClient依赖compile ('org . apache . httpcomponents :httpclient:4.5.3')}其次 , 通过RestTemplateBuilder来创建RestTemplate实例 。
import org. spr ingframework .beans. factory .annotation . Autowired;import org. spr ingframework. boot . web. client. RestTemplateBuilder;import org. spr ingf r amework. context. annotation. Bean;import org. springframework . context . annotation . Configuration;import org. springfr amework . web. client.RestTemplate;@Configurationpublic class RestConfiguration {@Autowi redprivate RestTemplateBuilder builder;@Beanpublic RestTemplate restTemplate() {return builder .build() ;}}最后 , 就能通过RestTemplate实例来访问RESTfulAPI服务了 。
@Servicepublic class WeatherDataServiceImpl implements WeatherDataService {CAutowiredprivate RestTemplate restTemplate;private WeatherResponse doGetWeatherData (String uri) {ResponseEntity<String> response = restTemplate . getForEntity (uri, String.class) ;// 。。}// . 。} 
springcloud微服务架构开发实战:常见微服务的消费者

文章插图
 
RibbonSpring Cloud Ribbon是基于Netlix Ribbon实现的一套客户端负载均衡的工具 。它是一一个基于HTTP和TCP的客户端负载均衡器 。
Ribbon的一一个中心概念就是命名客户端 。每个负载平衡器都是组合整个服务组件的一部分 , 它们一起协作 , 并可以根据需要与远程服务器进行交互 , 获取包含命名客户端名称的集合 。SpringCloud根据需要 , 使用RibbonClientConfiguration为每个命名客户端创建一个新的集合作为Applica-tionContext 。这其中包括- - 个ILoadBalancer、一个RestClient和一个ServerListFilter 。
Ribbon经常与Eureka结合使用 。在典型的分布式部署中 , Eureka 为所有微服务实例提供服务注册 , 而Ribbon则提供服务消费的客户端 。Ribbon 客户端组件提供一- 系列完善的配置选项 , 如连接超时、重试、重试算法等 。Ribbon内置可插拔、可定制的负载均衡组件 。下 面是用到的一一些负载均衡策略:
●简单轮询负载均衡;
●加权响应时间负 载均衡;
●区域感知轮询负载均衡;
●随机负载均衡 。
其中 , 区域感知负载均衡器是Ribbon 一个久经考验的功能 , 该负载均衡器会采取如下步骤 。
●负载均衡器会检查、计算所有可用区域的状态 。如果某个区域中平均每个服务器的活跃请求已经达到配置的阈值 , 该区域将从活跃服务器列表中排除 。如果多于-一个区域已经到达阈值 , 平均每服务器拥有最多活跃请求的区域将被排除 。
●最差的区域被排除后 , 从剩下的区域中 , 将按照服务器实例数的概率抽样法选择一 个区域 。
●在选定区域中 , 将会根据给定负载均衡策略规则返回一个服务器 。


推荐阅读