在工作实际开发中需要开发一个消息模块对外提供统一的接口feign调用提供消息加载到MQ队列的服务,采用泛型的形式。

刚开始搭建好之后,正好需要做一个全局的日志添加到zuul网关中,通过网关feign MQ模块发送到队列(这个操作是异步的,不会影响主要业务流程),随后log模块需要监听这个channel。之前消息模块刚搭建起来的时候是没有问题的,但是在我写统一的日志记录的时候,发生了意外情况。

情况一:Feign请求直接进入熔断而非处理器

上午排查了2个小时feign的调用过程中也没有发生报错,*本身是GET 请求也就是意味着是URI 传参后来因为特殊类型比较多,log传参采用的 body传参,记住这个点,破案的重点。

后来尝试body去了,继续采用GET请求仍然不行 * 这是另外一个情况造成的。

情况一:

无意间把body的传参给删除了,没有方向的时候也百度不到答案只能尝试从源码中找调用的问题但是没有研究过Feign的调用过程但是知道其最终肯定也是发送Http请求进行数据的交互,于是直接在Log模块中的dispatchServlet打上断点(因为从feign的请求过来 直接进入熔断,但是传参有值说明接收到了请求),接着一步一步的走过去发现竟然走通了,进入了最终的处理器,十分的震惊多次请求不敢相信,结果都通过了。后来不知道在哪里尝试重新传参,无意间发现Jackson序列化会提前将body,我的请求数据格式:{"name":"name", "age":"20", "user":{}}会直接将user 优先转换为LinkedHashMap,导致进入传参时会数据类型转换失败。后来将接收改成了Map<String, Object> 解决了问题。

情况二:

后来想到为什么之前也尝试了GET,把body传参去除为什么收不到消息呢?甚至会存在第一次channel收到,第二次channel没有收到。于是打开rabbitmq的管理端,发现log——channel 存在2个消费者,*** 但是我清晰的知道我就采用了一个消费者进行队列的监听。** 经过重启消费者全部清空,但是没过一会又会新增几个。突发奇想我目前开发环境使用了jrebel的热部署插件不会对项目重启而是重新加载修改的class并对bean进行重新加载,因为rabbitmq默认的consumer-tag 是随机的导致没有覆盖原有的消费者,形成了负载均衡和消息不可达。

经过实践测试原因找到并解决。

关于Feign、Jackson、RabbitMQ、Jrebel插件的开发中遇到的问题的更多相关文章

  1. (持续更新)vs2012,2013,2015,2017,2019 常用的插件 与 开发中常用的工具

    这篇博客 持续更新. 小伙伴们可以复制名称,在vs的扩展和更新中去搜索下载 .其他的工具在官网下载

  2. 180714、JRebel插件安装配置与破解激活(多方案)详细教程

    JRebel 介绍 IDEA上原生是不支持热部署的,一般更新了 Java 文件后要手动重启 Tomcat 服务器,才能生效,浪费不少生命啊.目前对于idea热部署最好的解决方案就是安装JRebel插件 ...

  3. JRebel插件安装配置与破解激活(多方案)详细教程

    JRebel 介绍 IDEA上原生是不支持热部署的,一般更新了 Java 文件后要手动重启 Tomcat 服务器,才能生效,浪费不少生命啊.目前对于idea热部署最好的解决方案就是安装JRebel插件 ...

  4. Android应用插件式开发解决方法

    转自:http://blog.csdn.net/arui319/article/details/8109650 一.现实需求描述 一般的,一个Android应用在开发到了一定阶段以后,功能模块将会越来 ...

  5. Android应用插件式开发解决方法[转]

    一.现实需求描述 一般的,一个Android应用在开发到了一定阶段以后,功能模块将会越来越多,APK安装包也越来越大,用户在使用过程中也没有办法选择性的加载自己需要的功能模块.此时可能就需要考虑如何分 ...

  6. 也来学学插件式开发续-利用MEF

    前面一个博客:也来学学插件式开发中很多朋友留言说可以用MEF来实现.于是我就试着用MEF实现了一下. 步骤和上一篇差不多,只是加载插件的方式有所不同.这只是一个自己的示例程序,肯定有很多不足之处,欢迎 ...

  7. Java基础学习总结(57)——Jrebel插件热部署

    JavaEE开发环境下,Tomcat对热布署的支持还是比较弱,致使开发过程中浪费大量时间在重启服务上.胖先生讨厌来来回回的折腾,所以想看看有没有实时的编译,发现Jrebel的插件付费软件,它对热布署的 ...

  8. 使用JRebel插件实现SpringBoot应用代码热加载

    前言 在实际的开发过程中,我们经常修改代码之后,手动的重启项目,查看修改效果.那么有没有一种方式能够快速的.自动的帮我们将修改代码自动更新,避免手动重启,从而提高开发效率呢?是有的,在我之前的文章里面 ...

  9. 使用这些idea插件让开发效率提高5倍

    idea 有很多非常好用的插件,用好了这些插件能够极大的提高开发效率 插件用的好,bug 就追不上了我

随机推荐

  1. 混沌工程之ChaosToolkit使用之一删除K8s POD

    今天我们来玩一下混沌工程的开源工具chaostoolkit . 它的目标是提供一个免费,开放,社区驱动的工具集以及api. 官方源码链接:https://github.com/chaostoolkit ...

  2. kubernates 1.20.6安装

    kubernates 安装 1. 前置要求 硬件条件 三台主机 1主2从 硬件配置 master 2核4G slave 2核2G 2. 安装 访问GitHub 仓库 https://github.co ...

  3. Docker学不会?不妨看看这篇文章

    大家好,我是辰哥! 上一篇文章(2300+字!在不同系统上安装Docker!)教大家如何在系统上安装docker,今天咱们来学习docker的基本使用. 辰哥将在本文里详细介绍docker的各种使用命 ...

  4. Reactive Spring实战 -- 响应式MySql交互

    本文与大家探讨Spring中如何实现MySql响应式交互. Spring Data R2DBC项目是Spring提供的数据库响应式编程框架. R2DBC是Reactive Relational Dat ...

  5. 前端集合传参,springmvc后端如何接收

    废话不多说,上代码 后端接收对象: class ObjectA{ private String a; private String b; private List<ObjectB> lis ...

  6. FreeRTOS基本概念

    1.在FreeRTOS中,使用的数据类型虽然都是标准C里面的数据类型,但是针对不同的处理器,对标准C的数据类型又进行了重新定义. 2.链表由节点组成,节点与节点之间首尾相连,节点包含用于指向后一个节点 ...

  7. CF1539C Stable Groups[题解]

    Stable Groups 题目大意 给定 \(n\) 个数 \(a_i\) ,你可以将这些数分成若干组,但每一组的元素满足按升序排列后,相邻两个元素值的差不超过 \(x\) .在分组前,你可以向这些 ...

  8. 抓包工具-Charles

    1.简介Charles Charles其实是一款代理服务器,通过成为电脑或者浏览器的代理,然后截取请求和请求结果达到分析抓包的目的.charles有Window版本和Mac OS版本,也同时支持ios ...

  9. Vue全局弹窗:一次注册,全局可弹

    Vue全局弹窗 今天来搞一个全局弹窗,不用每个文件都引入,只在main.js里作为全局原型引入就好了 先新建弹窗组件 toast.vue <template></template&g ...

  10. Qt5MV自定义模型与实例浅析

    1. Model/View结构 这种结构,其实就是将界面组件与所编辑的数据分离开来,又通过数据源的方式连接起来,相当于解耦,视图层只关心显示和与用户交互,而数据层负责与实际的数据进行通信,并为视图组件 ...