spring-cloud 学习笔记 - 外传(3)

[外传] 关于 Ribbon 和 Feign

  在微服务消费的学习过程中,我并没有像别的博主使用Feign和Ribbon。因为这两个东西如果直接放到博文中可能会导致读者的混乱,搞不清楚这两者的关系,所以我单独写一篇来介绍这两者的关系。

一. 关于Ribbon

什么是 Ribbon

Spring Cloud Netflix Ribbon 是由 Netflix 开源的客户端负载均衡的组件。使用 java 语言实现。

说白了,ribbon像是nginx中的负载均衡组件一样,用来实现客户端的负载均衡。

为什么使用 Ribbon

Ribbon作为后端负载均衡器,比Nginx更注重的是承担并发而不是请求分发,可以直接感知后台动态变化来指定分发策略。 ---Lovnx : Ribbon负载均衡策略配置

从上面这段话我们可以看出,和nginx的定位不一样,nginx是被动分发请求,而Ribbon是主动选择不同的服务提供者,Ribbon的服务提供者又来至于服务注册中心eureka或者consul等。

Ribbon有什么特点

说白了,Ribbon的最大的优势就是背靠Spring Cloud Netflix这座大山,作为Netflix全家桶中的一员,Ribbon拥有天生的整合优势。

如何使用 Ribbon

如果使用的是RestTemplate框架的话,只需要在RestTemplate初始化的方法上面加一个@LoadBalanced就可以了。

@Bean
@LoadBalanced
RestTemplate restTemplate() {
    return new RestTemplate();
}

二. 关于Feign

什么是Feign

Feign是一个声明式Web Service客户端。使用Feign能让编写Web Service客户端更加简单, 它的使用方法是定义一个接口,然后在上面添加注解,同时也支持JAX-RS标准的注解。Feign也支持可拔插式的编码器和解码器。Spring Cloud对Feign进行了封装,使其支持了Spring MVC标准注解和HttpMessageConverters。Feign可以与Eureka和Ribbon组合使用以支持负载均衡。 ---spring-cloud官方手册中文翻译 : 声明式REST客户端:Feign

如何使用

首先在pom.xml中引入资源:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-feign</artifactId>
</dependency>

使用spring-cloud-starter-feign会默认引入ribbon的包,也就是说feign是默认集成了ribbon的

修改Application主类,添加@EnableFeignClients注解,以启用Feign:

@SpringBootApplication
@EnableAutoConfiguration
@EnableDiscoveryClient
@EnableFeignClients
public class SpringCloudServerConsumerApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringCloudServerConsumerApplication.class, args);
    }
}

创建远程调用接口类HelloClient.java

@FeignClient(name = "SPRING-CLOUD-EUREKA-CLIENT")
public interface HelloClient {

    @RequestMapping(method = RequestMethod.POST,value = "/say",consumes = "application/json")
    String say();
}

在@FeignClient中使用一个字符串(例子中的"SPRING-CLOUD-EUREKA-CLIENT")来指定客户端名字,这个名字也将被用于一个Ribbon负载均衡器。 还可以配置url属性来指定URL。 在Spring容器中会使用全限定名作为这个Bean的名称。同样,可以通过name属性进行自定义。 在上例中,通过@Qualifier("helloClient")就可以引用到这个Bean。 如果需要改变默认引用名称,可以在@FeignClient中配置qualifier属性。

使用接口调用实现:

@RestController
public class ServerCallController {

    @Autowired
    private HelloClient helloClient;

    @RequestMapping("/callServer")
    public String callServer(){
        return helloClient.say();
    }
}

参考文章

上述的Feign使用是非常基础的实现,如果需要实现更多的内容,可以参考以下文章:

结束

本文部分文本来源于互联网

感谢以下文章提供的灵感和帮助

转载于:https://my.oschina.net/u/3886491/blog/1844535

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值