文章插图

文章插图
第二种调用方式:feign

文章插图
2.4.1 restTemplate+ribbonribbon是一种负载均衡的客户端,它是什么呢?请详读
https://www.jianshu.com/p/1bd66db5dc46
可以看见其中的一段如下:
而客户端负载均衡和服务端负载均衡最大的不同点在于上面所提到服务清单所存储的位置 。在客户端负载均衡中,所有客户端节点都维护着自己要访问的服务端清单,而这些服务端端清单来自于服务注册中心,比如上一章我们介绍的Eureka服务端 。同服务端负载均衡的架构类似,在客户端负载均衡中也需要心跳去维护服务端清单的健康性,默认会创建针对各个服务治理框架的Ribbon自动化整合配置,比如Eureka中的接下来我们来搭建基于ribbon的客户端,他用于消费服务 。
org.springframework.cloud.netflix.ribbon.eureka.RibbonEurekaAutoConfiguration,Consul中的org.springframework.cloud.consul.discovery.RibbonConsulAutoConfiguration 。在实际使用的时候,我们可以通过查看这两个类的实现,以找到它们的配置详情来帮助我们更好地使用它 。
同理先搭建springboot的环境
与之前搭建servicesupport不同的是:
第一步:现在pom中需要在dependencies中添加ribbon依赖
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-ribbon</artifactId></dependency>第二步:yml如下配置:server:port: 8702 # 服务消费方 # 指定当前eureka客户端的注册地址,eureka:client:service-url:defaultZone: http://${eureka.instance.hostname}:8700/eurekainstance:hostname: localhost #当前服务名称spring:application:name: eureka-consumer服务的消费方依旧需要在注册方8700端口去注册 。配置当前服务消费方的端口8072,名字为eureka-consumer第三步:依旧需要启动类,因为它是一个springboot的架构:
package com.yun; import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.client.discovery.EnableDiscoveryClient;@SpringBootApplication@EnableDiscoveryClient //当前使用eureka的serverpublic class EurekaConsumerApplication {public static void main(String[] args) {SpringApplication.run(EurekaConsumerApplication.class,args);}}
文章插图
如上图:
我们需要一个controller类来编写ribbon的代码 。
package com.yun.controller; import org.springframework.beans.factory.annotation.Autowired;import org.springframework.cloud.client.ServiceInstance;import org.springframework.cloud.client.loadbalancer.LoadBalancerClient;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;import org.springframework.web.client.RestTemplate; @RestController@RequestMapping("/Hello")class ConsumerController {@Autowiredprivate LoadBalancerClient loadBalancerClient;@Autowiredprivate RestTemplate restTemplate;@RequestMapping("/Consumer")public String helloWorld(String s){System.out.println("传入的值为:"+s);//第一种调用方式//String forObject = new RestTemplate().getForObject("http://localhost:8071/Hello/World?s=" + s, String.class);//第二种调用方式//根据服务名 获取服务列表 根据算法选取某个服务 并访问某个服务的网络位置 。//ServiceInstance serviceInstance = loadBalancerClient.choose("EUREKA-SERVICE");//String forObject = new RestTemplate().getForObject("http://"+serviceInstance.getHost()+":"+serviceInstance.getPort()+"/Hello/World?s="+s,String.class);//第三种调用方式 需要restTemplate注入的方式String forObject = restTemplate.getForObject("http://EUREKA-SERVICE/Hello/World?s=" + s, String.class);return forObject;}}我们常用第三种调用方式 。第一种是直接调用:不经过注册中心那服务列表,直接访问的servicesupport
第二种:是根据服务名选择调用,如上图需要做如下注入
@Autowired如上图代码中第二种调用方法的代码所示 。
private LoadBalancerClient loadBalancerClient;
用服务名去注册中心获取服务列表,当前客户端底层会做随机算法的选取获得服务并访问 。
第三种需要一个@Bean的注解自动注入并直接调用restTemplate对象调用服务 。底层调用模式与第二种调用方式一样 。如下:
推荐阅读
- Facebook邮箱抓取5个工具
- 阿萨姆红茶的历史,阿萨姆红茶泡法
- 土耳其红茶产自哪里,红茶在土耳其的历史
- 翡翠|分辨翡翠饰品的优劣,可以从色彩这方面着手,根据物理区别鉴定
- 从源码看Log4j2、FastJson漏洞
- 一文读懂Access数据库,从此不用Access数据库
- 从啃PS到啃C4D,我的动态设计之路
- 如何从 Kafka 看 时间轮 算法设计
- 小白是如何让Kali Linux操作系统从U盘成功启动
- 最完整的Vue教程-从零开始编写可视化大屏
