ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2019-07-02 16:43:16  阅读:167  来源: 互联网

标签:Feign 调用 spring RestTemplate springframework import org cloud


一、Feign的介绍

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

  Feign和Ribbon的区别是:

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

二、Feign的服务调用与Ribbon的服务调用

1.Ribbon的调用模式

  a.导入maven  

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

   b.创建一个RestBean注入RestTemplate,不直接注入到controller层的原因是:我们还会为RestTemplate注入其他的属性

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的调用模式是直接通过响应为服务的地址进行访问

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的接口没有自己去实现,而是直接去调用生产者的接口地址。

标签:Feign,调用,spring,RestTemplate,springframework,import,org,cloud
来源: https://www.cnblogs.com/daijiting/p/11121064.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有