千家信息网

Spring Cloud中如果实现服务消费者RestTemplate+Ribbon

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,小编给大家分享一下Spring Cloud中如果实现服务消费者RestTemplate+Ribbon,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面
千家信息网最后更新 2026年11月02日Spring Cloud中如果实现服务消费者RestTemplate+Ribbon

小编给大家分享一下Spring Cloud中如果实现服务消费者RestTemplate+Ribbon,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

在上一篇文章,讲了服务的注册和发现。在微服务架构中,业务都会被拆分成一个独立的服务,服务与服务的通讯是基于http restful的。Spring cloud有两种服务调用方式,一种是ribbon+restTemplate,另一种是feign。在这一篇文章首先讲解下基于ribbon+rest。

一、ribbon简介

Ribbon is a client side load balancer which gives you a lot of control over the behaviour of HTTP and TCP clients. Feign already uses Ribbon, so if you are using @FeignClient then this section also applies.

--摘自官网

ribbon是一个负载均衡客户端,可以很好的控制htt和tcp的一些行为。Feign默认集成了ribbon。

ribbon 已经默认实现了这些配置bean:

  • IClientConfig ribbonClientConfig: DefaultClientConfigImpl

  • IRule ribbonRule: ZoneAvoidanceRule

  • IPing ribbonPing: NoOpPing

  • ServerList ribbonServerList: ConfigurationBasedServerList

  • ServerListFilter ribbonServerListFilter: ZonePreferenceServerListFilter

  • ILoadBalancer ribbonLoadBalancer: ZoneAwareLoadBalancer

二、准备工作

这一篇文章基于上一篇文章的工程,启动eureka-server 工程;启动service-hi工程,它的端口为8762;将service-hi的配置文件的端口改为8763,并启动,这时你会发现:service-hi在eureka-server注册了2个实例,这就相当于一个小的集群。访问localhost:8761如图所示:

三、建一个服务消费者

重新新建一个spring-boot工程,取名为:service-ribbon; 在它的pom.xml文件分别引入起步依赖spring-cloud-starter-eureka、spring-cloud-starter-ribbon、spring-boot-starter-web,代码如下:

org.springframework.cloudspring-cloud-starter-eurekaorg.springframework.cloudspring-cloud-starter-ribbonorg.springframework.bootspring-boot-starter-web

在工程的配置文件指定服务的注册中心地址为http://localhost:8761/eureka/,程序名称为 service-ribbon,程序端口为8764。配置文件application.yml如下:

eureka:  client:    serviceUrl:      defaultZone: http://localhost:8761/eureka/server:  port: 8764spring:  application:    name: service-ribbon

在工程的启动类中,通过@EnableDiscoveryClient向服务中心注册;并且向程序的ioc注入一个bean: restTemplate;并通过@LoadBalanced注解表明这个restRemplate开启负载均衡的功能。

@SpringBootApplication@EnableDiscoveryClientpublic class ServiceRibbonApplication {    @Bean    @LoadBalanced    RestTemplate restTemplate() {        return new RestTemplate();   }}

写一个测试类HelloService,通过之前注入ioc容器的restTemplate来消费service-hi服务的"/hi"接口,在这里我们直接用的程序名替代了具体的url地址,在ribbon中它会根据服务名来选择具体的服务实例,根据服务实例在请求的时候会用具体的url替换掉服务名,代码如下:

@Servicepublic class HelloService {    @Autowired    RestTemplate restTemplate;    public String hiService(String name) {        return restTemplate.getForObject("http://SERVICE-HI/hi?name="+name,String.class);    }}

写一个controller,在controller中用调用HelloService 的方法,代码如下:

@RestControllerpublic class HelloControler {    @Autowired    HelloService helloService;    @RequestMapping(value = "/hi")    public String hi(@RequestParam String name){        return helloService.hiService(name);    }}

在浏览器上多次访问http://localhost:8764/hi?name=forezp,浏览器交替显示:

hi forezp,i am from port:8762

hi forezp,i am from port:8763

这说明当我们通过调用restTemplate.getForObject("http://SERVICE-HI/hi?name="+name,String.class)方法时,已经做了负载均衡,访问了不同的端口的服务实例。

四、此时的架构

  • 一个服务注册中心,eureka server,端口为8761

  • service-hi工程跑了两个实例,端口分别为8762,8763,分别向服务注册中心注册

  • sercvice-ribbon端口为8764,向服务注册中心注册

  • 当sercvice-ribbon通过restTemplate调用service-hi的hi接口时,因为用ribbon进行了负载均衡,会轮流的调用service-hi:8762和8763 两个端口的hi接口;

以上是"Spring Cloud中如果实现服务消费者RestTemplate+Ribbon"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

服务 端口 工程 篇文章 实例 消费 均衡 文件 程序 配置 消费者 代码 接口 两个 内容 地址 方法 架构 浏览器 程序名 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技股 百单网互联网科技有限公司怎么样 云信互联网科技有限公司 深圳恒合互联网络科技有限公司 互联网品科技 网络科技有限互联网 安徽鑫晟辉互联网科技 善班互联网科技有限公司 老年人脱离互联网科技的作文 须眉科技是互联网公司吗 互联网教育科技公司vipkid 互联网科技实习生岗位职责 中国互联网有什么科技含量 银川新华互联网科技职业技术培训学校图片 互联网大会黑科技排名 玉溪互联网科技怎么选 科技类公司包括互联网吗 企晟互联网信息科技有限公司 工业互联网等科技实现智能化赋能 求路客互联网科技电话 美国互联网保险保险科技 关于新基建和互联网科技 互联网金融和金融科技 互联网金融监管科技 互联网汽车科技小镇 恒银科技与互联网金融 央行互联网金融科技公司 字节跳动和互联网科技 中天科技中国工业互联网 容联科技互联网电商
0