常见微服务的消费者
本节就常见的微服务的消费者进行介绍。在Java领域比较常用的消费者框架主要有HttpClient、Ribbon、Feign 等。
Apache HttpClient
Apache 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依赖。
其次,通过RestTemplateBuilder来创建RestTemplate实例。
最后,就能通过RestTemplate实例来访问RESTfulAPI服务了。
Ribbon
Spring Cloud Ribbon是基于Netlix Ribbon实现的一套客户端负载均衡的工具。它是一一个基于HTTP和TCP的客户端负载均衡器。
Ribbon的一一个中心概念就是命名客户端。每个负载平衡器都是组合整个服务组件的一部分,它们一起协作,并可以根据需要与远程服务器进行交互,获取包含命名客户端名称的集合。SpringCloud根据需要,使用RibbonClientConfiguration为每个命名客户端创建一个新的集合作为Applica-tionContext。这其中包括- - 个ILoadBalancer、一个RestClient和一个ServerListFilter。
Ribbon经常与Eureka结合使用。在典型的分布式部署中,Eureka 为所有微服务实例提供服务注册,而Ribbon则提供服务消费的客户端。Ribbon 客户端组件提供一- 系列完善的配置选项,如连接超时、重试、重试算法等。Ribbon内置可插拔、可定制的负载均衡组件。下 面是用到的一一些负载均衡策略:
●简单轮询负载均衡;
●加权响应时间负 载均衡;
●区域感知轮询负载均衡;
●随机负载均衡。
其中,区域感知负载均衡器是Ribbon 一个久经考验的功能,该负载均衡器会采取如下步骤。
●负载均衡器会检查、计算所有可用区域的状态。如果某个区域中平均每个服务器的活跃请求已经达到配置的阈值,该区域将从活跃服务器列表中排除。如果多于-一个区域已经到达阈值,平均每服务器拥有最多活跃请求的区域将被排除。
●最差的区域被排除后,从剩下的区域中,将按照服务器实例数的概率抽样法选择一 个区域。
●在选定区域中,将会根据给定负载均衡策略规则返回一个服务器。
在micro-weather-eureka-client应用基础上,我们稍作修改,使其成为一个新的应用mi-cro-weather-eureka-client-ribbon,作为本章节的示例。
1.所需环境
为了演示本例子,需要采用如下开发环境。
JDK 8。
Gradle 4.0。
● Redis 3.2.100。
● Spring Boot 2.0.0.M3。
●Spring Cloud Starter Netlix Eureka Client Finchley.M2。
●Spring Cloud Starter Netilix Ribbon。
2.项目配置
要使用Ribbon,最简单的方式莫过于添加Ribbon依赖。
3.启用Ribbon
Spring Cloud提供了声明式@RibbonClient注解来使用Ribbon。
其中RibbonConfiguration是Ribbon自定义的配置类,定义如下。
这样,我们就能通过应用名称msa-weather-city -eureka来访问微服务了,并且还实现了服务的负载均衡。
4.使用Ribbon
编写CityController,用于使用Ribbon配置的RestTemplate。
5.应用配置
该应用同时也是一个 Eureka Client。修改application.properties,将其修改为如下配置。
spring. application. name: micro-weather -eureka-client-ribbon eureka. client. serviceUrl .defaultZone: http://localhost:8761/eureka/
Feign
Feign是一- 个声明式的Web服务客户端,这使Web服务客户端的写人更加方便。它具有可插拔注解支持,包括Feign注解和JAX-RS注解。Feign 还支持可插拔编码器和解码器。Spring Cloud增加了对Spring MVC注解的支持,并且使用了在Spring Web中默认使用的相同的HttpMessageCon-verter。在使用Feign时,Spring Cloud集成了Ribbon 和Eureka 来提供负载平衡的HTTP客户端。
在micro-weather-eureka-client应用基础上,我们稍作修改,使其成为一个新的应用mi-cro-weather- eureka-client-feign,作为本节的示例。
1.所需环境
为了演示本例子,需要采用如下开发环境。
●Gradle 4.0。
●Redis 3.2.100。
●Spring Boot 2.0.0.M3。
●Spring Cloud Starter Netflix Eureka Client Finchley.M2。
●Spring Cloud Starter OpenFeign Finchley.M2。
2.项目配置
为了使用Feign,增加如下配置。
3.启用Feign
要启用Feign,最简单的方式就是在应用的根目录的Application 类上添加org.springframework.cloud.netlix. feign.EnableFeignClients注解。
4.使用Feign
要使用Feign,首先是编写Feign请求接口。
其中,@FeignClient指定了要访问的服务的名称msa- weather-city-eureka。
在声明了CityClient 接口之后,我们就能在控制器CityController中使用该接口的实现。
CityContoller 控制器专门用于请求获取城市信息的响应。这里,我们直接注入CityClient 接口即可,Feign框架会为我们提供具体的实现。
最后,修改application.properties。将其修改为如下配置。
其中:
源码
本节示例所涉及的源码,见micro-weather-eureka-server、micro-weather-eureka-client 和msa-weather-city-eureka,以及micro-weather-eureka-client-ribbon和micro-weather- eureka-client-feign。
本篇文章内容给大家讲解的是常见微服务的消费者
下篇文章给大家讲解使用Feign实现服务的消费者;
觉得文章不错的朋友可以转发此文关注小编;
感谢大家的支持!
领取专属 10元无门槛券
私享最新 技术干货