内容简介:注解式的早期版本的
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注解之运行时注解
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Learning Vue.js 2
Olga Filipova / Packt Publishing / 2017-1-5 / USD 41.99
About This Book Learn how to propagate DOM changes across the website without writing extensive jQuery callbacks code.Learn how to achieve reactivity and easily compose views with Vue.js and unders......一起来看看 《Learning Vue.js 2》 这本书的介绍吧!