内容简介:注解式的早期版本的
Spring Cloud
为开发者提供了在分布式系统中的一些常用的组件(例如配置管理,服务发现,断路器,智能路由,微代理,控制总线,一次性令牌,全局锁定,决策竞选,分布式会话集群状态)。使用Spring Cloud开发人员可以快速地完成实现这些模式的服务和应用程序。它们在任何分布式环境中都能很好地工作
Feign
注解式的 Feign
使得 Java HTTP 客户端编写更方便。 Feign
灵感来源于安卓网络编程框架 Retrofit
、 JAXRS-2.0
和 WebSocket
,支持可插拔编码器和解码器,降低 HTTP API 的复杂度,通过最少的资源和代码来实现和 HTTP API
的连接。通过可定制的解码器和错误处理,可以编写任意的HTTP API。 Spring Cloud Feign
封装了 Ribbon
这一组件,所以在使用 Feign
同时还能提供负载均衡的功能,这一切只需要一个 @FeignClient
即可完成。
早期版本的 Feign
被 Spring Cloud
团队集成在 spring-cloud-netflix
子项目下,但如今 Spring Cloud
团队将 Spring Cloud Feign
独立成一个单独的 spring-cloud-openfeign
项目
Try
准备三个工程,分别是 eureka-server
、 order-server
、 product-server
Eureka Server
详情参考第一章,或从文末的 GITHUB 链接获取对应篇幅的完整代码
Product Server
一个普通的 Eureka Client
即可,详情参考上一章,或从文末的 GITHUB 链接获取对应篇幅的完整代码
Order Server
这个例子也是在上一章的基础之上做了扩展
依赖
对比上一章,此处多了一个 spring-cloud-starter-openfeign
的依赖
<dependencies> <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> </dependencies>
配置文件
在 src/main/resources
目录下创建一个 bootstrap.yml
的文件,写上 eureka 相关配置信息
server: port: 7072 spring: application: name: order-server eureka: instance: prefer-ip-address: true instance-id: ${spring.cloud.client.ip-address}:${spring.application.instance_id:${server.port}} client: service-url: defaultZone: http://localhost:7071/eureka/
ProductClient 接口
创建一个 ProductClient
,是不是感觉和 XxxxService
看起来类似(用法都类似),都是接口文件只不过在这个文件的上方多了一个 @FeignClient
注解,多种写法,总有一款适合你
-
name
:指定FeignClient
的名称,该属性会作为微服务的名称,用于服务发现 -
value
:同name
字段互通 -
serviceId
:指定服务ID,每个注册到注册中心上的客户端都会有对应的serviceId
一般是spring.application.name
,与name
和value
互通 -
url
: 一般用于调试,可以指定一个详细地址( http://localhost:8080/products) -
path
: 请求统一路径,可以看成@RequestMapping("/products")
-
decode404
:404 错误时,调用decoder
进行解码,否则抛出FeignException
-
fallback
:发生错误时,回调hystrix
类/方法(后面会详细介绍)
package com.battcn.api; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; /** * @author Levin * @since 2018/9/26 0026 */ @FeignClient(name = "product-server/products", decode404 = true) //@FeignClient(name = "products", url = "http://localhost:7073/products") //@FeignClient(value = "product", serviceId = "product-server", path = "/products", decode404 = true) public interface ProductClient { /** * 根据产品ID查询产品信息 * * @param productId ID * @return 查询结果 */ @GetMapping("/{product_id}") String selectProductById(@PathVariable("product_id") Long productId); }
OrderController
直接使用 @Autowired
注入进去即可,然后调用就好了,对比较 Ribbon
这里我们看不到 RestTemplate
的代码了,也无需自己做解码映射, Spring Cloud Feign
默认都替我们实现好了,我们只需要遵循既定的标准即可
package com.battcn.controller; import com.battcn.api.ProductClient; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** * @author Levin * @since 2018/9/26 0026 */ @RestController @RequestMapping("/orders") public class OrderController { @Autowired private ProductClient productClient; @GetMapping public String query() { return this.productClient.selectProductById(10L); } }
主函数
通过 @EnableFeignClients
注解开启对 Feign
的支持,用习惯 Dubbo
的朋友喜欢将 API 打包成独立的 JAR ,这个时候需要指定 basePackage
属性。
package com.battcn; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.cloud.openfeign.EnableFeignClients; /** * @author Levin */ @EnableFeignClients @EnableDiscoveryClient @SpringBootApplication public class OrderApplication { public static void main(String[] args) { SpringApplication.run(OrderApplication.class, args); } }
总结
目前很多大佬都写过关于
Spring Cloud
的教程了,如有雷同,请多多包涵,本教程基于最新的 spring-cloud:Finchley.SR1
编写…
以上所述就是小编给大家介绍的《一起来学Spring Cloud(F版) | 第三篇:注解式HTTP请求Feign》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 基于注解的6.0权限动态请求框架——JPermission
- SpringMVC中的注解式控制器(一)——请求映射规则
- DartVM服务器开发(第6⃣️天)--利用注解处理请求
- Spring 注解编程之模式注解
- Java注解之编译时注解
- Java注解之运行时注解
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
大型网站技术架构
李智慧 / 电子工业出版社 / 2013-9-1 / 59.00元
《大型网站技术架构:核心原理与案例分析》通过梳理大型网站技术发展历程,剖析大型网站技术架构模式,深入讲述大型互联网架构设计的核心原理,并通过一组典型网站技术架构设计案例,为读者呈现一幅包括技术选型、架构设计、性能优化、Web 安全、系统发布、运维监控等在内的大型网站开发全景视图。 《大型网站技术架构:核心原理与案例分析》不仅适用于指导网站工程师、架构师进行网站技术架构设计,也可用于指导产品经......一起来看看 《大型网站技术架构》 这本书的介绍吧!