文档章节

Spring Cloud(Netflix) Feign: 以Dubbo暴露服务的方式使用Feign

liunaiye
 liunaiye
发布于 2016/10/09 09:30
字数 566
阅读 339
收藏 5
点赞 0
评论 0

需求场景

在微服务架构中,服务的请求者以何种方式调用远程服务是一项必须要解决的问题。在Spring Cloud(Netflix)技术栈中,每个微服务是以HTTP REST接口的形式暴露的,这样在执行远程调用时,正常情况下需要使用一个HTTP客户端,然后向服务发起HTTP请求。实际上,如果使用Netflix的Feign作为Http Client的话,我们就可以做到像Dubbo一样,服务的调用者直接调用接口方法调用远程服务,而不需要通过常规的Http Client构造请求再解析返回数据。

解决方案

Netflix Feign是一种模板化的Http Client, 即你可以通过编程的方式“制作”模板,然后在发起HTTP请求时就不需要指定URL请求头请求参数这些累赘的信息了,例如:

@FeignClient(name = "ea")
public interface AdvertGroupRemoteService {

    @RequestMapping(value = "/group/{groupId}")
    AdvertGroupVO findByGroupId(@PathVariable("groupId") Integer adGroupId);
}

上面的代码中我们声明了一个“模板”(实际是接口),模板中有一个方法findByGroupId, 并通过注解定义了这个方法需要发起的HTTP请求信息(注解与SpringMVC完全相同)。在使用时,我们只需要在调用端的Service中注入AdvertGroupRemoteService就可以 像调用本地方法一样执行远程调用了:

@RestController
public class TestCtr {

    @Autowired
    private AdvertGroupRemoteService advertGroupRemoteService;

    public AdvertGroupVO findById(Integer id) {
        return advertGroupRemoteService.findByGroupId(id);
    }
}

正常情况下,应当由服务的调用者使用这个HTTP Client向远程服务发起请求,但是这样的坏处是调用者必须对远程服务的HTTP REST接口非常了解。这里可以变通一下,我们为每一个微服务创建一个API包,这个包中只有@FeignClient的声明,然后在服务的调用端通过maven引入该API包,这样调用者就无需关心实际的REST接口而是像调用本地方法一样调用远程服务了。

一个需要注意的地方是,要想让Spring能自动扫描到@FeignClient接口,必须在Spring Boot的配置类中添加@EnableFeignClients(basePackages = "包名")注解,否则会导致注入失败。

 

本文转载自:http://blog.csdn.net/neosmith/article/details/52180852

共有 人打赏支持
liunaiye
粉丝 1
博文 2
码字总数 244
作品 0
潍坊
微服务系列-Spring Cloud优质项目推荐

Spring Cloud 微服务架构集大成者,云计算最佳业务实践。 image.png Spring Cloud Spring Cloud Config Spring 配置管理工具包,让你可以把配置放到远程服务器,集中化管理集群配置,目前支持...

高广超
2017/11/06
0
0
Spring Cloud Edgware新特性之三:使用配置属性自定义Feign的行为

Spring Cloud是当前炙手可热的微服务开发框架。它的功能强大,组件丰富,设计优雅。目前Spring Cloud还在不断发展之中。 Spring Cloud即将发布Spring Cloud Edgware 版本。该版本解决了不少B...

周立_ITMuch
2017/10/26
0
0
Spring Cloud学习:02服务消费者(Ribbon&Feign)

在微服务架构中,业务会拆分成一个独立的服务,服务与服务之间基于http restful进行通信。Spring Cloud有两种服务调用方式,一种是Ribbon+restTemplate,另一种是Feign。 1 Ribbon+restTempl...

寒武没有纪
2017/10/21
0
0
springcloud(三):服务提供与调用

文章概述 上一篇文章我们介绍了eureka服务注册中心的搭建,这篇文章介绍一下如何使用eureka服务注册中心,搭建一个简单的服务端注册服务,客户端去调用服务使用的案例。 案例中有三个角色: ...

AHUSKY
06/12
0
0
Feign使用Hystrix无效原因及解决方法

最近项目重构使用了Spring Boot和Spring Cloud。这两者结合确实给项目带来了方便,同时也遇到了一些问题。其中使用feign作为服务消费,但是断路器hystrix一直不起作用让人很费解。最终经过重...

嘻哈开发者
04/26
0
0
springCloud(9):使用Feign实现声明式REST调用-为消费者整合Feign与自定义Feign配置

一、简介 前面我们是使用RestTemplate实现rest api调用的,代码如下: @GetMapping("/user/{id}")public User findById(@PathVariable Long id) throws Exception { return this.restTempla......

我爱大金子
2017/07/17
0
0
SpringCloud之声明式服务调用 Feign(三)

一 Feign简介 Feign是一种声明式、模板化的HTTP客户端,也是netflix公司组件。使用feign可以在远程调用另外服务的API,如果调用本地API一样。 我们知道,阿里巴巴的doubbo采用二进制的RPC协议...

07/13
0
0
微服务架构的基础框架选择:Spring Cloud还是Dubbo?

详细比较:http://blog.didispace.com/microservice-framework/ - Dubbo Spring Cloud 服务注册中心 Zookeeper Spring Cloud Netflix Eureka 服务调用方式 RPC REST API 服务网关 无 Spring......

weiliu007
2016/11/15
310
0
《Spring Cloud Netflix官方文档》7.声明式 REST 客户端: Feign

原文链接 Feign 是一个声明式的web服务客户端。它使得编写web服务客户端更简单,创建一个接口并加上注解就能使用Feign了,它还支持JAX-RS类型的注解,可插入式的编码和解码,Spring cloud 为他...

floder
2017/01/05
0
0
疯狂Spring Cloud连载(10)——Rest客户端Feign介绍

本文节选自《疯狂Spring Cloud微服务架构实战》 京东购买地址:https://item.jd.com/12256011.html 当当网购买地址:http://product.dangdang.com/25201393.html Spring Cloud教学视频:htt...

杨大仙的程序空间
2017/10/19
0
3

没有更多内容

加载失败,请刷新页面

加载更多

下一页

代码生成利器:IDEA 强大的 Live Templates

代码生成利器:IDEA 强大的 Live Templates

qwfys
19分钟前
1
0
spring boot使用通用mapper(tk.mapper) ,id自增和回显等问题

最近项目使用到tk.mapper设置id自增,数据库是mysql。在使用通用mapper主键生成过程中有一些问题,在总结一下。 1、UUID生成方式-字符串主键 在主键上增加注解 @Id @GeneratedValue...

北岩
23分钟前
1
0
告警系统邮件引擎、运行告警系统

告警系统邮件引擎 cd mail vim mail.py #!/usr/bin/env python#-*- coding: UTF-8 -*-import os,sysreload(sys)sys.setdefaultencoding('utf8')import getoptimport smtplibfr......

Zhouliang6
25分钟前
0
0
日常运维--rsync同步工具

rsync命令是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件。rsync使用所谓的“rsync算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而...

chencheng-linux
30分钟前
1
0
Java工具类—随机数

Java中常用的生成随机数有Math.random()方法及java.util.Random类.但他们生成的随机数都是伪随机的. Math.radom()方法 在jdk1.8的Math类中可以看到,Math.random()方法实际上就是调用Random类...

PrivateO2
42分钟前
1
0
关于java内存模型、并发编程的好文

Java并发编程:volatile关键字解析    volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在...

DannyCoder
昨天
0
0
dubbo @Reference retries 重试次数 一个坑

在代码一中设置 成retries=0,也就是调用超时不用重试,结果DEBUG的时候总是重试,不是0吗,0就不用重试啊。为什么还是调用了多次呢? 结果在网上看到 这篇文章才明白 https://www.cnblogs....

奋斗的小牛
昨天
1
0
数据结构与算法3

要抓紧喽~~~~~~~放羊的孩纸回来喽 LowArray类和LowArrayApp类 程序将一个普通的Java数组封装在LowArray类中。类中的数组隐藏了起来,它是私有的,所以只有类自己的方法才能访问他。 LowArray...

沉迷于编程的小菜菜
昨天
0
0
spring boot应用测试框架介绍

一、spring boot应用测试存在的问题 官方提供的测试框架spring-boot-test-starter,虽然提供了很多功能(junit、spring test、assertj、hamcrest、mockito、jsonassert、jsonpath),但是在数...

yangjianzhou
昨天
1
0
rsync工具介绍/rsync通过ssh同步

rsync工具介绍 数据备份是必不可少,在Linux系统下数据备份的工具很多,其中重点介绍就是rsync工具,rsync不仅可以远程同步数据,还可以本地同步数据,且不会覆盖以前的数据在已经存在的数据...

Hi_Yolks
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部