springcloud微服务(五)声明式服务调用SpringCloud Feign
feign介绍
Feign是一个声明式的Web Service客户端,它的目的就是让Web Service调用更加简单。Feign提供了HTTP请求的模板,通过编写简单的接口和插入注解,就可以定义好HTTP请求的参数、格式、地址等信息。
而Feign则会完全代理HTTP请求,我们只需要像调用方法一样调用它就可以完成服务请求及相关处理。Feign整合了Ribbon和Hystrix(关于Hystrix我们后面再讲),可以让我们不再需要显式地使用这两个组件。
feign特性
-
可插拔的注解支持,包括Feign注解和JAX-RS注解; 支持可插拔的HTTP编码器和解码器; 支持Hystrix和它的Fallback; 支持Ribbon的负载均衡; 支持HTTP请求和响应的压缩。
环境搭建
接着前面的代码
Maven依赖信息
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>
feign客户端接口
@FeignClient name指定调用服务中心的哪个服务
package com.eurekaclient.order.api.service; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.RequestMapping; // name 指定服务名称 @FeignClient(name = "eureka-client-member") public interface MemberApiFeign { @RequestMapping("/member") public String getMember(); }
修改Order服务的Controller
package com.eurekaclient.order.api.service; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate; @RestController public class IndexController { @Autowired RestTemplate restTemplate; @Autowired private MemberApiFeign memberApifeign; @RequestMapping("/feignorder") public String order(){ String result= memberApifeign.getMember(); return "我是订单服务调用了"+result; } }
项目启动加上@EnableFeignClients
@SpringBootApplication @EnableEurekaClient @EnableFeignClients public class AppOrder { public static void main(String[] args) { SpringApplication.run(AppOrder.class, args); // 如果使用rest方式以别名方式进行调用依赖ribbon负载均衡器 @LoadBalanced // @LoadBalanced就能让这个RestTemplate在请求时拥有客户端负载均衡的能力 } // 解决RestTemplate 找不到原因 应该把restTemplate注册SpringBoot容器中 @bean @Bean @LoadBalanced RestTemplate restTemplate() { return new RestTemplate(); } }
效果
调用order项目的feignorder接口