天天看点

编码实现Spring Cloud微服务负载均衡调用(eureka、ribbon)

spring 封装、揉和了一批开源项目,其中以netflix开源的为主,比如zuul、eureka、hystrix、robbin等;然后就有了现在的spring cloud微服务架构。这也充分展现了spring的揉合能力。

spring cloud通过封装使这些项目融入spring的bean管理机制中,从而方便使用。这套微服务的核心功能还是使用这些项目的。

由本篇的标题可以想到本篇就是不使用spring的注解和配置来使用这套微服务。看看现在网上关于spring cloud的示例,千篇一律那几行注解和代码。确实方便了使用。

本篇主要从微服务的调用端来讲解的,主要涉及如下几点:

全局配置,包括服务注册中心配置;

初始化服务发现客户端;

实例化负载均衡调用实现类;

实例化某个具体调用requset,再对根据服务均衡器选择的服务提供者进行调用;

如果你使用过dubbo的泛化调用,会发现很相似;难怪有人专门对比使用spring cloud和dubbo来实现微服务。

如下为编码实现的例子,很多说明在注解中;

zuul实现了网关框架,主要逻辑为执行pre、route、post三种类型的filter,且可以动态加载filter,使用方可以实现自己的filter。

spring cloud封装实现的route类型filter,默认使用了ribbon对eureka 服务发现的负载均衡client。

spring cloud在结合了ribbon的负载均衡实现中,封装增加了httpclient和okhttp两种http请求端实现。

spring cloud中还集成了feign,方便的使用http请求调用远程服务,且可以灵活的使用和自定义各种编解码器实现入参和出差的序列化和反序列化。

做上面的代码示例的想法来源于现在负责的网关项目中一些需求想法,之前网关只适配了dubbo类型的rpc服务集群,目前一些新项目开始试行spring cloud架构,所以网关在做对应的适配。图例如下:

编码实现Spring Cloud微服务负载均衡调用(eureka、ribbon)