博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
springcloud 实战 feign使用中遇到的相关问题
阅读量:6079 次
发布时间:2019-06-20

本文共 3381 字,大约阅读时间需要 11 分钟。

 springcloud 实战 feign使用中遇到的相关问题

1.使用feign客户端调用其他微服务时,session没有传递成功,sessionId不一样。

/** * @author xbchenf * @date 2018-10-27 16:35:52 * @description 通过拦截器,将head补上,避免session丢失 */@Configurationpublic class FeignConfiguration implements RequestInterceptor{    private final Logger logger = LoggerFactory.getLogger(FeignConfiguration.class);    @Override    public void apply(RequestTemplate template) {        RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();        if (requestAttributes == null) {            return;        }        HttpServletRequest request = ((ServletRequestAttributes) requestAttributes).getRequest();        Enumeration
headerNames = request.getHeaderNames(); if (headerNames != null) { while (headerNames.hasMoreElements()) { String name = headerNames.nextElement(); Enumeration
values = request.getHeaders(name); while (values.hasMoreElements()) { String value = values.nextElement(); logger.warn("name:"+name+";value:"+value); template.header(name, value); } } } }}

  

2.使用feign客户端调用其他微服务时,发送POST请求时,对象信息没有传递成功。

关键在于加上注解:@RequestBody

feign客户端:

@FeignClient(name = "mpmt-user")public interface PersonFeignClient {  @GetMapping("/feign/testGet/{id}")  public ResponseEntity
testGet(@PathVariable(value = "id") Integer id); @PostMapping("/feign/testPost") public ResponseEntity
testPost(@RequestBody Person person);}

  

微服务服务端:mpmt-user

@RestController@RequestMapping("/feign")public class FeignController {    private final Logger logger = Logger.getLogger(FeignController.class);    @GetMapping("/testGet/{id}")    public ResponseEntity
testGet(@PathVariable(value = "id") Integer id,HttpServletRequest request) { JsonResult r = new JsonResult(); try { logger.info("sessionid:"+request.getSession().getId()); User user = (User)request.getSession().getAttribute("sessionUser"); logger.info("userId:"+user.getId()); r.setResult(user); r.setStatus("200"); } catch (Exception e) { r.setResult(e.getClass().getName() + ":" + e.getMessage()); r.setStatus("error"); e.printStackTrace(); } return ResponseEntity.ok(r); } /** * 添加用户 * 提供给后端feign调用的接口,post请求都要使用@RequestBody ,包括feign中定义的接口 * @param person * @return */ @PostMapping("/testPost") public ResponseEntity
testPost(@RequestBody Person person,HttpServletRequest request) { JsonResult r = new JsonResult(); try { logger.info("sessionid:"+request.getSession().getId()); User user = (User)request.getSession().getAttribute("sessionUser"); logger.info("userId:"+user.getId()); r.setResult(person); } catch (Exception e) { r.setResult(e.getClass().getName() + ":" + e.getMessage()); r.setStatus("error"); e.printStackTrace(); } return ResponseEntity.ok(r); }}

 

3.使用feign客户端调用其他微服务时,报错超时:e=feign.RetryableException: Read timed out executing POST

ribbon.ReadTimeout=60000 ribbon.ConnectTimeout=60000

转载于:https://www.cnblogs.com/brant/p/9864813.html

你可能感兴趣的文章
如何设置缺省路由 route hosts(仅助记) 马连洼 马连洼 马连洼
查看>>
webform中使用webapi,并且使用autofac
查看>>
手动构建Servlet项目的流程
查看>>
JDBC
查看>>
sqlserver 空间数据类型
查看>>
Mac下使用Apache TCPMon
查看>>
Linux下使用rsync最快速删除海量文件的方法
查看>>
利用 druid 解析器解析SQL
查看>>
Relearning PHP (2) – php 的浮点数float
查看>>
2015年读书列表
查看>>
LeetCode - Search a 2D Matrix
查看>>
【转】Eclipse上安装GIT插件EGit及使用
查看>>
以交互方式使用exp/imp的演示
查看>>
Python对文件的操作(转)
查看>>
Codeforces Round #263 (Div. 2)
查看>>
软考概述
查看>>
程序猿打新总结 6月份 新股申购秘籍
查看>>
163源报错Hash Sum mismatch 解决方法
查看>>
使用ECMAscript5中的forEach函数遍历数组
查看>>
Linux之MySQL
查看>>