spring cloud学习笔记三 Feign与Ribbon负载均衡的区别

1、Feign的介绍java

  Feign通常比较书面的解释是:Feign是一个声明式的WebService客户端,使用Feign编写的WebService客户端更加简单,他的使用方法是定义一个接口,而后在上线添加注解,,同事也支持JAX-RX标准的注解,Feign也支持可拔插式的编码器和解码器,Spring Cloud对Feign进行了封装,使其支持了Spring MVC标准直接和HttpMessageConverters。Feign能够与Eureka和Ribbon组合使用一支持负载均衡。web

  Feign和Ribbon的区别是:spring

  简单的说,ribbon是直接经过微服务的地址调用服务,Feign是经过调用接口来进行调用服务。下面我就来根据两者的代码来分析二者的区别:restful

2、Feign的服务调用与Ribbon的服务调用
架构

1.Ribbon的调用模式app

  a.导入maven  负载均衡

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

   b.建立一个RestBean注入RestTemplate,不直接注入到controller层的缘由是:咱们还会为RestTemplate注入其余的属性maven

import org.springframework.cloud.client.loadbalancer.LoadBalanced; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.client.RestTemplate; //这个注解表示将这个类注入到spring boot的容器中
@Configuration public class RestBean { @Bean @LoadBalanced //这个注解是Ribbon使用负载均衡的注解
    public RestTemplate getRestTemplate() { return new RestTemplate(); } }

  c.建立controller层,调用生产者服务微服务

import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate; import java.util.List; @RestController public class RibbonController { //此处的请求前缀是微服务提供者的服务名称,至关于localhost:8080
    private static final String producter_url = "http://productor"; /** * 使用 使用restTemplate访问restful接口很是的简单粗暴无脑。 (url, requestMap, * ResponseBean.class)这三个参数分别表明 REST请求地址、请求参数、HTTP响应转换被转换成的对象类型。 */ @Autowired private RestTemplate restTemplate; @RequestMapping(value = "/consumer/dept/list") public List<String> list() { return restTemplate.getForObject(producter_url + "/show", List.class); } }

咱们能够看见,Ribbon的调用模式是直接经过响应为服务的地址进行访问this

2.Feign的调用模式

  a.导入maven

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

  b.建立一个controller

import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.List; @RestController public class FeignController { @Autowired private FeignService feignShow; @RequestMapping(value = "/show") public List<String> feignMain() { return this.feignShow.show(); } }

  c.建立service

//这个注解表示要调用的微服务名称
@FeignClient(value = "productor") public interface FeignService { //使用Feign方式调用服务,直接就能调用生产者接口的地址
    @RequestMapping(value = "/show", method = RequestMethod.GET) List<String> show(); }

  从上面两个调用方式的对比咱们能够看见:Ribbon中没有使用service,而是经过RestTemplate直接经过地址访问生产者的服务;Feign则是和咱们平时使用的架构同样,只是service的接口没有本身去实现,而是直接去调用生产者的接口地址。

相关文章
相关标签/搜索