• 现象:收到消息会打印告警消息::Could not convert incoming message with content-type [null]
  • 解决:

RabbitMQ已经实现了Jackson的消息转换(Jackson2JsonMessageConverter),由于考虑到效率,如下使用Gson实现消息转换。

如下消息的转换类的接口MessageConverter,Jackson2JsonMessageConverter的父类AbstractJsonMessageConverter针对json转换的基类。

我们实现Gson2JsonMessageConverter转换类也继承AbstractJsonMessageConverter。

引入Gson的pom

[html]  view plain  copy

  1. <dependency>
  2. <groupId>com.google.code.gson</groupId>
  3. <artifactId>gson</artifactId>
  4. <version>2.3</version>
  5. </dependency>

转换类实现如下:

[java]  view plain  copy

  1. package cn.slimsmart.rabbitmq.demo.spring.tag;
  2. import java.io.IOException;
  3. import java.io.UnsupportedEncodingException;
  4. import org.apache.commons.logging.Log;
  5. import org.apache.commons.logging.LogFactory;
  6. import org.springframework.amqp.core.Message;
  7. import org.springframework.amqp.core.MessageProperties;
  8. import org.springframework.amqp.support.converter.AbstractJsonMessageConverter;
  9. import org.springframework.amqp.support.converter.ClassMapper;
  10. import org.springframework.amqp.support.converter.DefaultClassMapper;
  11. import org.springframework.amqp.support.converter.MessageConversionException;
  12. import com.google.gson.Gson;
  13. public class Gson2JsonMessageConverter extends AbstractJsonMessageConverter {
  14. private static Log log = LogFactory.getLog(Gson2JsonMessageConverter.class);
  15. private static  ClassMapper classMapper =  new DefaultClassMapper();
  16. private static Gson gson = new Gson();
  17. public Gson2JsonMessageConverter() {
  18. super();
  19. }
  20. @Override
  21. protected Message createMessage(Object object,
  22. MessageProperties messageProperties) {
  23. byte[] bytes = null;
  24. try {
  25. String jsonString = gson.toJson(object);
  26. bytes = jsonString.getBytes(getDefaultCharset());
  27. }
  28. catch (IOException e) {
  29. throw new MessageConversionException(
  30. "Failed to convert Message content", e);
  31. }
  32. messageProperties.setContentType(MessageProperties.CONTENT_TYPE_JSON);
  33. messageProperties.setContentEncoding(getDefaultCharset());
  34. if (bytes != null) {
  35. messageProperties.setContentLength(bytes.length);
  36. }
  37. classMapper.fromClass(object.getClass(),messageProperties);
  38. return new Message(bytes, messageProperties);
  39. }
  40. @Override
  41. public Object fromMessage(Message message)
  42. throws MessageConversionException {
  43. Object content = null;
  44. MessageProperties properties = message.getMessageProperties();
  45. if (properties != null) {
  46. String contentType = properties.getContentType();
  47. if (contentType != null && contentType.contains("json")) {
  48. String encoding = properties.getContentEncoding();
  49. if (encoding == null) {
  50. encoding = getDefaultCharset();
  51. }
  52. try {
  53. Class<?> targetClass = getClassMapper().toClass(
  54. message.getMessageProperties());
  55. content = convertBytesToObject(message.getBody(),
  56. encoding, targetClass);
  57. }
  58. catch (IOException e) {
  59. throw new MessageConversionException(
  60. "Failed to convert Message content", e);
  61. }
  62. }
  63. else {
  64. log.warn("Could not convert incoming message with content-type ["
  65. + contentType + "]");
  66. }
  67. }
  68. if (content == null) {
  69. content = message.getBody();
  70. }
  71. return content;
  72. }
  73. private Object convertBytesToObject(byte[] body, String encoding,
  74. Class<?> clazz) throws UnsupportedEncodingException {
  75. String contentAsString = new String(body, encoding);
  76. return gson.fromJson(contentAsString, clazz);
  77. }
  78. }

解决rabbitmq收到消息打印告警消息相关推荐

  1. 告警消息何去何从?在飞书中飞起来

    作者简介 袁振,SUSE Rancher 技术支持经理,负责订阅客户售后技术支持团队,为订阅客户提供技术支持服务.2016 年开始接触容器.Kubernetes 技术,对自动化运维.Devops.Ku ...

  2. rabbitmq可靠性投递_解决RabbitMQ消息丢失问题和保证消息可靠性(一)

    工作中经常用到消息中间件来解决系统间的解耦问题或者高并发消峰问题,但是消息的可靠性如何保证一直是个很大的问题,什么情况下消息就不见了?如何防止消息丢失?下面通过这篇文章,我们就聊聊RabbitMQ 消 ...

  3. 解决RabbitMQ消息丢失与重复消费问题

    解决RabbitMQ消息丢失与重复消费问题 参考文章: (1)解决RabbitMQ消息丢失与重复消费问题 (2)https://www.cnblogs.com/sessionbest/articles ...

  4. 关于智能分析网关V2版告警消息微信推送绑定不成功的原因分析及解决

    我们在此前的文章中分享过关于智能分析网关的告警消息推送功能.智能分析网关可支持对视频监控中的人脸.车辆.物体.行为等进行识别与抓拍.比对.告警,可提供人脸检测与识别.车辆检测与识别.烟火识别.区域入侵 ...

  5. RabbitMQ 从入门到精通 消息应答 持久化 交换机 队列 发布确认 集群 等

    RabbitMQ消息队列 RabbitMQ 的概念 RabbitMQ 是一个消息中间件:它接受并转发消息.你可以把它当做一个快递站点,当你要发送一个包裹时,你把你的包裹放到快递站,快递员最终会把你的快 ...

  6. RabbitMQ入门(三)消息应答与发布确认

    前言: 消息应答与发布确认都是保证消息不丢失.而重复消费问题则是消息幂等性.(之后会说幂等性) 消息应答: 应答功能属于消费者,消费者在接收到消息并且处理该消息之后,告诉 rabbitmq 它已经处理 ...

  7. rabbitmq消息队列,消息发送失败,消息持久化,消费者处理失败相关

    转:https://blog.csdn.net/u014373554/article/details/92686063 项目是使用springboot项目开发的,前是代码实现,后面有分析发送消息失败. ...

  8. activemq nodejs stomp 重连机制_5分钟优劣分析 Kafka、RabbitMQ、RocketMQ、ActiveMQ消息队列...

    一.资料文档 Kafka:中,有kafka作者自己写的书,网上资料也有一些. rabbitmq:有一些不错的书,网上资料多. zeromq:少.没有专门写zeromq的书,网上的资料多是一些代码的实现 ...

  9. 【重难点】【RabbitMQ 02】如何避免消息重复投递和消息重复消费、如何防止消息丢失、如何保证消息的顺序性、如何保证消息队列的可用性

    [重难点][RabbitMQ 02]如何避免消息重复投递和消息重复消费.如何防止消息丢失.如何保证消息的顺序性.如何保证消息队列的可用性 文章目录 [重难点][RabbitMQ 02]如何避免消息重复 ...

最新文章

  1. (理解和3种方法完全解决pycharm报错)main.py: error: the following arguments are required: -d/--dataset
  2. 年终盘点 | 七年零故障支撑 双11 的消息中间件 RocketMQ,怎么做到的?
  3. Webservice入门教程_用JDK开发Webservice
  4. 北斗导航 | Modified Tropospheric:对流层延迟计算(matlab代码)
  5. javascript this指针指向?
  6. 组装电脑教程(转载)
  7. Delta架构:统一Lambda架构并利用Hadoop / REST中的Storm
  8. 冯偌依曼计算机的基本原理是,03级计算机专《计算机组成原理》试卷A.doc
  9. OpenGL基础5:第一个正方形
  10. iphone电压测试软件,电压电击iPhone结果会怎样? 通过测试后, 照样可以正常开机...
  11. 维纳滤波器matlab程序,维纳滤波原理及其matlab实现
  12. Android群英传笔记——第七章:Android动画机制和使用技巧
  13. 未储存的Pages文件怎么恢复
  14. 项目管理的5大过程/ 9大知识领域/44个子过程
  15. 目标检测: 一文读懂 CenterNet (CVPR 2019)
  16. 屏幕进入省电模式计算机未输出,戴尔 U2719DC 显示器使用与故障处理指南
  17. 如何把公司网址生成二维码
  18. 一刀传世服务器维护,#一刀传世#
  19. chrome inspect联调android手机webview和web h5遇坑
  20. 磊科nw336 linux驱动下载,磊科Netcore NW336驱动

热门文章

  1. 独立站现在好不好做?个人适合做跨境电商独立站吗?
  2. php采集扩展,PHP扩展生成器
  3. 机器学习、神经网络中不懂的函数及功能实现
  4. CN笔记:第三章 链路层
  5. 吴恩达机器学习5——神经网络的学习
  6. 机器学习实战(十)Apriori(关联分析)
  7. python找第二大的数索引_python – 在numpy数组中查找多个值的行索引
  8. mysql limit分页_MySQL order by limit 分页数据重复问题
  9. 【第7篇】Python爬虫实战-收集gitee中的issue问题
  10. Linux配置JAVA环境变量(图文教程)