您当前的位置:首页 > 电脑百科 > 程序开发 > 架构

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

时间:2020-09-11 11:29:17  来源:  作者:

常见微服务的消费者

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

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

 

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依赖。

//依赖关系
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;
@Configuration
public class RestConfiguration {
@Autowi red
private RestTemplateBuilder builder;@Bean
public RestTemplate restTemplate() {
return builder .build() ;
}}

最后,就能通过RestTemplate实例来访问RESTfulAPI服务了。

@Service
public class WeatherDataServiceImpl implements WeatherDataService {
CAutowiredprivate RestTemplate restTemplate;private WeatherResponse doGetWeatherData (String uri) {
ResponseEntity<String> response = restTemplate . getForEntity (uri, String.class) ;
//。。
}
// .。}

 

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

 

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依赖。

//依赖关系
dependencies {//添加Spring Cloud Starter Netflix Ribbon依赖compile (' org. spr ingframework. cloud: spring-cloud-starter-netflix-rib-
bon')
}

3.启用Ribbon

Spring Cloud提供了声明式@RibbonClient注解来使用Ribbon。

package com. waylau. spring. cloud. weather . config;
import org. springframework.beans. factory . annotation. Autowired;
import org. spr ingf r amework. boot. web. cl ient. RestTemplateBuilder;
import org. springfr amework. cloud.client. loadbalancer .LoadBalanced;
import org.spr ingframework .cloud. netflix. ribbon. RibbonCl ient;
import org. spr ingfr amework. context. annotation. Bean;
import org. springfr amework.context. annotation. Configuration;
import org. springframework. web. client. RestTemplate;
t REST配置类.* @since 1.0.0 2017年11月03日
k Cauthor <a href="https: / /waylau. com">Way Lau</a>
@Configuration
@RibbonClient (name = "ribbon-client", configuration = RibbonConfiguration.
class)
public class RestConfiguration {
@Autowi red
private RestTemplateBuilder builder;@Bean
@LoadBalanced
public RestTemplate restTemplate () {
return builder .build() ;
}}

其中RibbonConfiguration是Ribbon自定义的配置类,定义如下。

/ **
*/package com. waylau. spring.cloud . weather . config;
import org. spr ingframework.cloud.netflix. ribbon. ZonePreferenceServerList
Filter;import org. springfr amework. context. annotation. Bean;
import org. springframework. context. annotation. Configuration;
import com. netflix. loadbalancer. IPing; 
import com. netflix. loadbalancer . PingUrl;
/**
城市配置.
* @since 1.0.0 2017年11月3日 
@author <a href="https://waylau. com">Way Lau</a>
@Configuration
public class RibbonConfiguration {
@Bean
public ZonePreferenceServerListFilter serverListFilter() {
ZonePreferenceServerListFilter filter = new ZonePreferenceServer-
ListFilter ()
filter .setZone ("myZone") ;
return filter;
@Bean
public IPing ribbonPing() {
return new PingUrl () ;
}
}

这样,我们就能通过应用名称msa-weather-city -eureka来访问微服务了,并且还实现了服务的负载均衡。

4.使用Ribbon

编写CityController,用于使用Ribbon配置的RestTemplate。

import org. springframework. beans. factory . annotation. Autowired;
import org . springf ramework. web. bind. annotation. GetMapping;
import org.spr ingframework . web. bind. annotation. RestController;
import org. springf ramework. web. cl ient . RestTemplate;
/**
City Controller .
* @since 1.0.0 2017年11月03日
@author <a href="https:/ /waylau. com">Way Lau</a>
@RestController 
public class CityController
@Autowired
private RestTemplate res tTemplate;
@GetMapping ("/cities")
public String listCity() {
//通过应用名称来查找
String body = restTemplate . getForEntity ("http:/ /msa-weather-
city-eureka/cities", String.class) .getBody() ;
return body;
}
}

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,增加如下配置。

dependencies {
//添加Spring Cloud Starter OpenFeign依赖
compile('org. spr ingframework. cloud:spring-cloud-starter-openfeign')
}

3.启用Feign

要启用Feign,最简单的方式就是在应用的根目录的Application 类上添加org.springframework.cloud.netlix. feign.EnableFeignClients注解。

import org.springframework .boot. SpringApplication;
import org. springfr amework . boot. autoconfigure . SpringBootApplication;
import org. springframework. cloud. client . discovery . EnableDi scoveryClient;
import org.springframework. cloud. netflix. feign. EnableFeignClients;
/**
★主应用程序.
★asince 1.0.0 2017年11月04日
* Cauthor <a href="https:/ /waylau. com">Way Lau</a>
*/
@SpringBootApplication
@EnableDiscoveryCl ient
@EnableFeignClients
public class Appl ication {
public static void main(String[] args) {
SpringApplication. run (Application.class, args) ;
}}

4.使用Feign

要使用Feign,首先是编写Feign请求接口。

package com. waylau. spring.cloud. weather .service;
import org. spr ingf ramework. cloud . netflix. feign. FeignClient;
import org. springfr amework. web . bind. annotation . GetMapping;
★访问城市信息的客户端.* Gsince 1.0.0 2017年11月4日
* @author <a href="https:/ /waylau. com">Way Lau</a>
*/@FeignClient ("msa-weather-city-eureka")
public interface CityClient {
@GetMapping("/cities")
String listCity() ;}}

其中,@FeignClient指定了要访问的服务的名称msa- weather-city-eureka。

在声明了CityClient 接口之后,我们就能在控制器CityController中使用该接口的实现。

import org. springframework .beans. factory .annotation. Autowired;
import org. springframework. web .bind. annotation. GetMapping;
import org. springf r amework. web.bind. annotation. RestController;
import com. waylau. spring. cloud . weather . service. CityClient;
/★** City Controller.★@since 1.0.0 2017年11月04日
* @author <a href="https:/ /waylau. com">Way Lau</a>
@RestController
public class CityController {
@Autowired
private CityClient cityClient;
@GetMapping("/cities")
public String listCity() {
/通过Feign客户端来查找String body = cityClient. listCity() ;return body;
}}

CityContoller 控制器专门用于请求获取城市信息的响应。这里,我们直接注入CityClient 接口即可,Feign框架会为我们提供具体的实现。

最后,修改application.properties。将其修改为如下配置。

spr ing . application. name: micro-weather -eureka-client-feign 
eureka. client. serviceUrl. defaultZone: http:/ /localhost: 8761/eureka/ 
feign.cl ient. config. feignName . connectTimeout: 5000
feign. cl ient. config. feignName . readTimeout: 5000

其中:

● feign.client.config.feignName.connectTimeout为连接超时时间;

feign.client.conig. feignName.readTimeout为读数据的超时时间。

源码

本节示例所涉及的源码,见micro-weather-eureka-server、micro-weather-eureka-client 和msa-weather-city-eureka,以及micro-weather-eureka-client-ribbon和micro-weather- eureka-client-feign。



Tags:微服务架构   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
前言要理解微服务,首先要先理解不是微服务的那些。通常跟微服务相对的是单体应用,即将所有功能都打包成在一个独立单元的应用程序。从单体应用到微服务并不是一蹴而就的,这是一...【详细内容】
2021-07-09  Tags: 微服务架构  点击:(112)  评论:(0)  加入收藏
一、Zuul简介Zuul相当于是第三方调用和服务提供方之间的防护门,其中最大的亮点就是可动态发布过滤器二、Zuul可以为我们提供什么1、权限控制2、预警和监控3、红绿部署、(粘...【详细内容】
2021-04-21  Tags: 微服务架构  点击:(229)  评论:(0)  加入收藏
前不久作为架构师完成了某知名快消企业的一个业务中台建设。系统上线后,经历了双十一活动的流量高峰,整体运行稳定。最近有空,便将此次架构的思路,心得稍作整理在这篇博客中分享...【详细内容】
2021-02-07  Tags: 微服务架构  点击:(181)  评论:(0)  加入收藏
文章简介:作者结合自身微服务架构研发经验进行回顾、总结,本文将介绍微服务架构中,在技术选型时需要注意哪些选型原则,会遇到哪些开源框架,又该如何选择, 进行了全面的归纳、对比,希望能够为大家提供一些思路、方向,少走一些...【详细内容】
2021-02-05  Tags: 微服务架构  点击:(160)  评论:(0)  加入收藏
思维导图 文章已收录Github精选,欢迎Star:https://github.com/yehongzhi/learningSummary一、前言伴随着Eurka2.0版本已停止维护,开始要考虑使用微服务新一代的开源的注册中心...【详细内容】
2020-11-13  Tags: 微服务架构  点击:(159)  评论:(0)  加入收藏
消息总线的定义前面在1.4.2节中强调过,在微服务架构中,经常会使用REST 服务或基于消息的通信机制。在3.6节中也详细介绍了消息通信的实现方式。消息总线就是一种基于消息的通...【详细内容】
2020-09-29  Tags: 微服务架构  点击:(140)  评论:(0)  加入收藏
微服务的高级主题一自动扩展Spring Cloud 提供了大规模部署微服务所必需的支持。为了获得像云服务环境一样的能力, 微服务实例也应该能够根据流量的规模来自动扩展,也称自动缩...【详细内容】
2020-09-23  Tags: 微服务架构  点击:(96)  评论:(0)  加入收藏
Spring Cloud 微服务总体架构图Spring cloud作为当下主流的微服务框架,让我们实现微服务架构简单快捷,Spring cloud中各个组件在微服务架构中扮演的角色如图所示。spring-cl...【详细内容】
2020-09-20  Tags: 微服务架构  点击:(133)  评论:(0)  加入收藏
常见微服务的消费者本节就常见的微服务的消费者进行介绍。在Java领域比较常用的消费者框架主要有HttpClient、Ribbon、Feign 等。 Apache HttpClientApache HttpClient是Apa...【详细内容】
2020-09-11  Tags: 微服务架构  点击:(129)  评论:(0)  加入收藏
什么是微服务模式随着网络基础设施的高速发展,以及越来越多的个体接入互联网,在考虑构建支持海量请求以及多变业务的软件平台时,微服务架构成为多数人的首选。微服务架构的出现...【详细内容】
2020-09-09  Tags: 微服务架构  点击:(95)  评论:(0)  加入收藏
▌简易百科推荐
为了构建高并发、高可用的系统架构,压测、容量预估必不可少,在发现系统瓶颈后,需要有针对性地扩容、优化。结合楼主的经验和知识,本文做一个简单的总结,欢迎探讨。1、QPS保障目标...【详细内容】
2021-12-27  大数据架构师    Tags:架构   点击:(3)  评论:(0)  加入收藏
前言 单片机开发中,我们往往首先接触裸机系统,然后到RTOS,那么它们的软件架构是什么?这是我们开发人员必须认真考虑的问题。在实际项目中,首先选择软件架构是非常重要的,接下来我...【详细内容】
2021-12-23  正点原子原子哥    Tags:架构   点击:(7)  评论:(0)  加入收藏
现有数据架构难以支撑现代化应用的实现。 随着云计算产业的快速崛起,带动着各行各业开始自己的基于云的业务创新和信息架构现代化,云计算的可靠性、灵活性、按需计费的高性价...【详细内容】
2021-12-22    CSDN  Tags:数据架构   点击:(10)  评论:(0)  加入收藏
▶ 企业级项目结构封装释义 如果你刚毕业,作为Java新手程序员进入一家企业,拿到代码之后,你有什么感觉呢?如果你没有听过多模块、分布式这类的概念,那么多半会傻眼。为什么一个项...【详细内容】
2021-12-20  蜗牛学苑    Tags:微服务   点击:(8)  评论:(0)  加入收藏
我是一名程序员关注我们吧,我们会多多分享技术和资源。进来的朋友,可以多了解下青锋的产品,已开源多个产品的架构版本。Thymeleaf版(开源)1、采用技术: springboot、layui、Thymel...【详细内容】
2021-12-14  青锋爱编程    Tags:后台架构   点击:(20)  评论:(0)  加入收藏
在了解连接池之前,我们需要对长、短链接建立初步认识。我们都知道,网络通信大部分都是基于TCP/IP协议,数据传输之前,双方通过“三次握手”建立连接,当数据传输完成之后,又通过“四次挥手”释放连接,以下是“三次握手”与“四...【详细内容】
2021-12-14  架构即人生    Tags:连接池   点击:(16)  评论:(0)  加入收藏
随着移动互联网技术的快速发展,在新业务、新领域、新场景的驱动下,基于传统大型机的服务部署方式,不仅难以适应快速增长的业务需求,而且持续耗费高昂的成本,从而使得各大生产厂商...【详细内容】
2021-12-08  架构驿站    Tags:分布式系统   点击:(23)  评论:(0)  加入收藏
本系列为 Netty 学习笔记,本篇介绍总结Java NIO 网络编程。Netty 作为一个异步的、事件驱动的网络应用程序框架,也是基于NIO的客户、服务器端的编程框架。其对 Java NIO 底层...【详细内容】
2021-12-07  大数据架构师    Tags:Netty   点击:(16)  评论:(0)  加入收藏
前面谈过很多关于数字化转型,云原生,微服务方面的文章。虽然自己一直做大集团的SOA集成平台咨询规划和建设项目,但是当前传统企业数字化转型,国产化和自主可控,云原生,微服务是不...【详细内容】
2021-12-06  人月聊IT    Tags:架构   点击:(23)  评论:(0)  加入收藏
微服务看似是完美的解决方案。从理论上来说,微服务提高了开发速度,而且还可以单独扩展应用的某个部分。但实际上,微服务带有一定的隐形成本。我认为,没有亲自动手构建微服务的经历,就无法真正了解其复杂性。...【详细内容】
2021-11-26  GreekDataGuy  CSDN  Tags:单体应用   点击:(35)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条