Feign远程接口调用
clouds234@163.com
2018-8-6
以下都是使用在springboot2.0.4内置启动插件基础上
Feign-only 不注册到eureka
单独使用feign远程调用接口,不讲feign注册到注册中时的使用方法;只需要在feignclient注解添加url;如下:
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;
@FeignClient(name="url-feign",url="http://localhost:8099",fallback=UrlFeignFallback.class)
public interface UrlFeignClient {
@RequestMapping("/test/getuser")
public String getUser();
}
@Component
class UrlFeignFallback implements UrlFeignClient{
@Override
public String getUser() {
return "error urlfeign!!!";
}
}
这个是service层;不需要单独添加@service注解也可以使用@autowired注入;另外注意这里的fallback需要在配置文件启用;
在yml文件添加:
feign:
hystrix:
enabled: true
feign 注册到eureka
如果feign是注册到eureka的;那么可以简化注解,并且可以实现负载均衡等功能;如下:
@FeignClient(value="server1",fallback=SchedualServiceHiHystric.class)
public interface SchedualServiceHi {
@RequestMapping(value="/hi",method=RequestMethod.GET)
String sayHiFromClientOne(@RequestParam(value="name")String name);
}
/**
* 当消费者请求超时时返回本类信息;
* 本类需实现消费接口;每个方法重写一个超时信息;
* @author clouds234@163.com
* @date 2018年7月5日
*/
@Component
class SchedualServiceHiHystric implements SchedualServiceHi {
@Override
public String sayHiFromClientOne(String name) {
return "sorry "+name+",the server is not answer!!!";
}
}
这里的value="server1"是注册到eureka中心的服务名称;
spring cloud Feign添加headers
使用spring cloud 做saas服务器时,经常会通过Feign调用远程服务。有时候我们的远程服务可能做了某些权限验证。需要验证header或者token什么的。如果某没有token,可能会被阻止调用。那如何添加token呢。如果每个方法都手动设置headers,那未免太麻烦。可以通过一个切面,自动帮我们添加请求header。
直接上代码:
@Configuration
public class FeignConfig implements RequestInterceptor
{
//这里是我自己的redis代理,用不上可以去掉
@Autowired
private IRedisProxy redisProxy;
@Override
public void apply(RequestTemplate requestTemplate)
{
// 生成远程调用认证token
//String token = TokenUtil.TokenCreate("feign");
// 放到redis,设置时长为10S,一般10S后还没有完成请求则token失效
//redisProxy.setex(token, 10, token);
//设置token,关键方法
requestTemplate.header("Token", token);
}
}