什么是Feign:
声明式的伪Http客户端,使得写http客户端变得简单使用Feign只要创建一个接口并注解就好,有可插拔的注解特性,可使用Feign注解和JAX-RS注解支持可插拔的编码器和解码器整合了Ribbon,有负载均衡的能力整合了Hystrix,有熔断能力
创建一个Feign模块:
<!--引入eureka、feign、web的start-->
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
</dependencies>
很普通的注册,没别的了:
server:
port: 8801
#注册到eureka的服务器名称
spring:
application:
name: nohairLoss-feign-
client
#服务注册到eureka地址
eureka:
client:
service-
url:
defaultZone: http://localhost:8761/eureka/
启动类,加三个注解,springboot的启动类,注册到eureka,feign的客户端。
@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients
public class ServerFeignApplication {
public static void main(String[] args){
SpringApplication.run(ServerFeignApplication.class,args);
}
}
写service:
这里面有个坑
https://github.com/spring-cloud/spring-cloud-netflix/issues/861
就是用@RequestParam不行,用@PathVariable要加上value属性
有一些比较疑惑的点是,Feign有点像远程调用,在service里面调用别的controller的,service不用谢实现类,可能是因为Feign有啥子特殊处理?
然后还有就是,Service里面的@FeignClient指定了要掉那个服务,那么还要不要加controller上面的路径/user什么的?
远程调用,restFul风格数据格式传输会有问题
是的restFul传输是个坑,不用在controller上加/user了
//加此注解表示我要调用,注册到eureka里面的哪个服务,里面写服务名
@FeignClient("noHairLoss-eurake-user"
)
public interface UserService {
/**
* 注解中指定要调用哪个接口,参数正常写就好。
* @param emoji
* @return
*/
@RequestMapping(value="/user/judgeEmoji/{emoji}",method =
RequestMethod.GET)
public Object judgeEmoji(@PathVariable(value = "emoji"
)String emoji);
}
转载于:https://www.cnblogs.com/wzdnwyyu/p/11180535.html
相关资源:SpringCloud-创建服务消费者-Feign方式示例代码.zip