我是靠谱客的博主 傻傻麦片,最近开发中收集的这篇文章主要介绍SpringCloud(二)之feign和ribbon,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

SpringCloud(二)之feign和ribbon

1.ribbon

ribbon的作用,如果像上篇一样我们调用的话写死固定的节点,这样我们的服务还是一个单点调用。ribbon就是实现服务多个提供者之间的负载均衡的一个插件。

集成ribbon

a.导入ribbon的依赖

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

b.启动类添加注解**@RibbonClient(name = “PROVIDER-EUREKA”)**:

@SpringBootApplication
@EnableEurekaClient
@RibbonClient(name = "PROVIDER-EUREKA")
public class RibbonConsumerAppklication {
public static void main(String[] args) {
SpringApplication.run(RibbonConsumerAppklication.class);
}
@Bean
@LoadBalanced //默认轮询
public RestTemplate restTemplate(){
return new RestTemplate();
}
}

注解LoadBalanced就是开启负载均衡策略,默认是轮询策略。

c.controller层代码

@Autowired
private RestTemplate restTemplate;
@Autowired
private LoadBalancerClient loadBalancerClient;
@GetMapping("/ribbon")
public String hiRibbion(){
String result = restTemplate.getForObject("http://PROVIDER-EUREKA/hi/ribbon", String.class);
ServiceInstance choose = loadBalancerClient.choose("PROVIDER-EUREKA");
System.out.println(choose.getHost()+choose.getPort());
return result+choose.getUri();
}

直接使用RestTemplate通过服务名调用服务,LoadBalancerClient对象可以获取服务提供者的详细信息。我们可以打印控制太看他的负载均衡策略是什么样子的。

d.自定义ribbon的负载均衡测策略

最简单的就是直接在yml配置文件中配置即可:

PROVIDER-EUREKA: #要设置 ribbon 的服务的名字
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule #负载均衡的规则 随机

其他的策略配置和其他的方式自定义负载策略的方式可以参考springcloud的官方文档。

2.feign

feign的内部其实就是封装了ribbon和RestTemplate的操作我们通过一个接口和注解就可以操作了。只是进行了分封装,简化了操作。

a.第一步当然还是导入feign的依赖。(feign的依赖中已经包含了ribbon的了)

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

b.第二步实现一个接口,进行feign的配置

@FeignClient("PROVIDER-EUREKA")//内部其实就是通过ribbon和restTemplate实现的帮我们省略了实现的过程
public interface ProviderService {
@RequestMapping("/hi/feign")
String hiFiegn();
}

c.最后在controller中注入接口,调用方法即可。


@Autowired
private
ProviderService providerService;
@GetMapping("/feign")
public String hiFeign(){
return providerService.hiFiegn();
}

ribbon就是为了实现消费者对服务提供者负载均衡调用的插件,防止服务中出现单点故障。feign就是对我们用ribbon实现服务提供者负载均衡过程的一个封装,用起来更加简便,直接使用即可。å

最后

以上就是傻傻麦片为你收集整理的SpringCloud(二)之feign和ribbon的全部内容,希望文章能够帮你解决SpringCloud(二)之feign和ribbon所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(51)

评论列表共有 0 条评论

立即
投稿
返回
顶部