问题描述

  • 写入RabbitMQ消息
  • 接收RabbitMQ消息类型 String
@RabbitHandler
public void receive(String message) {if (StringUtils.isEmpty(message)) {return;}// 业务代码
}
  • 上面配置导致无限循环抛出异常如下
[08:57:05.502][DEBUG][o.s.a.r.listener.BlockingQueueConsumer][org.springframework.amqp.rabbit.RabbitListenerEndpointContainer#0-1] Received message: (Body:'[B@d5b8d16(byte[223])' MessageProperties [headers={}, contentLength=0, redelivered=true, receivedExchange=exchange.canal, receivedRoutingKey=canal-routing-key, deliveryTag=450, consumerTag=amq.ctag-x079bMTfxizFn_WM75rJyw, consumerQueue=mes_warning_message])
[08:57:05.502][DEBUG][o.s.a.r.l.a.MessagingMessageListenerAdapter][org.springframework.amqp.rabbit.RabbitListenerEndpointContainer#0-1] Processing [GenericMessage [payload=byte[223], headers={amqp_receivedRoutingKey=canal-routing-key, amqp_receivedExchange=exchange.canal, amqp_deliveryTag=450, amqp_consumerQueue=mes_warning_message, amqp_redelivered=true, id=e14a2efd-12d0-1c7d-2c1b-43b9f6432c28, amqp_consumerTag=amq.ctag-x079bMTfxizFn_WM75rJyw, amqp_lastInBatch=false, timestamp=1639011425502}]]
[08:57:05.502][DEBUG][o.s.a.r.listener.BlockingQueueConsumer][pool-2-thread-6] Received cancelOk for tag amq.ctag-x079bMTfxizFn_WM75rJyw (mes_warning_message); Consumer@34114276: tags=[[amq.ctag-x079bMTfxizFn_WM75rJyw]], channel=Cached Rabbit Channel: AMQChannel(amqp://test@127.0.0.1:5672/,1), conn: Proxy@42db3ff Shared Rabbit Connection: SimpleConnection@23dda7a3 [delegate=amqp://test@127.0.0.1:5672/, localPort= 50086], acknowledgeMode=AUTO local queue size=0
[08:57:05.502][DEBUG][o.s.a.r.l.SimpleMessageListenerContainer][org.springframework.amqp.rabbit.RabbitListenerEndpointContainer#0-1] Listener exception after container shutdown
org.springframework.amqp.rabbit.support.ListenerExecutionFailedException: Listener threw exceptionat org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.wrapToListenerExecutionFailedExceptionIfNeeded(AbstractMessageListenerContainer.java:1699)at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.doInvokeListener(AbstractMessageListenerContainer.java:1589)at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.actualInvokeListener(AbstractMessageListenerContainer.java:1504)at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.invokeListener(AbstractMessageListenerContainer.java:1492)at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.doExecuteListener(AbstractMessageListenerContainer.java:1483)at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.executeListener(AbstractMessageListenerContainer.java:1427)at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.doReceiveAndExecute(SimpleMessageListenerContainer.java:970)at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.receiveAndExecute(SimpleMessageListenerContainer.java:916)at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.access$1600(SimpleMessageListenerContainer.java:83)at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer$AsyncMessageProcessingConsumer.mainLoop(SimpleMessageListenerContainer.java:1291)at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer$AsyncMessageProcessingConsumer.run(SimpleMessageListenerContainer.java:1197)at java.lang.Thread.run(Thread.java:748)
Caused by: org.springframework.amqp.AmqpException: No method found for class [Bat org.springframework.amqp.rabbit.listener.adapter.DelegatingInvocableHandler.getHandlerForPayload(DelegatingInvocableHandler.java:151)at org.springframework.amqp.rabbit.listener.adapter.DelegatingInvocableHandler.getMethodFor(DelegatingInvocableHandler.java:270)at org.springframework.amqp.rabbit.listener.adapter.HandlerAdapter.getMethodFor(HandlerAdapter.java:84)at org.springframework.amqp.rabbit.listener.adapter.MessagingMessageListenerAdapter.invokeHandlerAndProcessResult(MessagingMessageListenerAdapter.java:146)at org.springframework.amqp.rabbit.listener.adapter.MessagingMessageListenerAdapter.onMessage(MessagingMessageListenerAdapter.java:133)at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.doInvokeListener(AbstractMessageListenerContainer.java:1585)... 10 common frames omitted

原因

  • 接收消息信息类型错误,将String 类型改为 byte[]

解决办法

  • 新增RabbItConfig配置文件,完成JSON格式的String转成字节码
import org.springframework.amqp.rabbit.config.SimpleRabbitListenerContainerFactory;
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class RabbitConfig {@Beanpublic RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory) {RabbitTemplate template = new RabbitTemplate(connectionFactory);template.setMessageConverter(new Jackson2JsonMessageConverter());return template;}@Beanpublic SimpleRabbitListenerContainerFactory rabbitListenerContainerFactory(ConnectionFactory connectionFactory) {SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();factory.setConnectionFactory(connectionFactory);factory.setMessageConverter(new Jackson2JsonMessageConverter());return factory;}
}
  • 用字节码数组接收,并转换为String
    @RabbitHandlerpublic void receive(byte[] result) {String message = null;try {message = new String(result, StandardCharsets.UTF_8.name());} catch (UnsupportedEncodingException e) {e.printStackTrace();}if (StringUtils.isEmpty(message)) {return;}}

无限循环抛出 No method found for class [B 这个异常相关推荐

  1. 错误记录一:线程通信时抛出Exception in thread “Thread-0” java.lang.IllegalMonitorStateException异常

    错误记录一:线程通信时抛出Exception in thread "Thread-0" java.lang.IllegalMonitorStateException异常 完整异常: ...

  2. Springboot 抛出Failed to determine a suitable driver class异常原因

    Springboot 抛出Failed to determine a suitable driver class异常原因 参考文章: (1)Springboot 抛出Failed to determi ...

  3. oracle异常抛出,ORACLE 存储过程异常捕获并抛出

    for tab_name in tables loop execute immediate 'drop table '||tab_name; --此处可能会报错 end loop; 当前情况是,循环表 ...

  4. 【C++ 语言】异常 ( 抛出字符串异常 | 抛出异常对象 | 抛出任意对象 | 抛出自定义异常 )

    文章目录 I 异常处理 II 字符串异常 III 异常对象 IV 抛出任意类型对象 V 自定义异常 VI 异常相关代码 I 异常处理 1. 异常处理 : 使用 " try{}catch(){ ...

  5. Effective Java之抛出与抽象相应的异常(六十一)

    1.如何处理异常? 方法B抛出了一个受检的异常 ,那么方法A在内部调用方法B时,面对方法B抛出的受检异常,可以选择继续抛出向上传播这个异常,也可以捕获这个异常进行处理.究竟是向上传播抛出,还是捕获处理 ...

  6. 异常全家桶来咯,异常捕获,异常抛出,自定义异常

    1.捕获异常: 在Java中,凡是可能抛出异常的语句,都可以用try...catch捕获.把可能发生异常的语句放在try{...}中,然后使用catch捕获对应的Exception及其子类. 1.多c ...

  7. js手动抛错_javascript如何抛出错误?

    程序的非正常运行状态被称为"异常"或"错误",解释器会为每个错误情形创建并抛出一个Error对象,其中包含错误的描述信息. ECMAScript 定义了六种类型 ...

  8. java 捕捉的异常抛出_Java异常抛出和捕获

    Java中把非正常情况分为两种,异常(Exception)和错误(Error). 异常.png Error:一般是指与虚拟机相关的问题(虚拟机错误.线程死锁等),这种错误无法回复或不可能捕获 Exce ...

  9. 【C++ 语言】异常 ( 抛出字符串异常 | 抛出异常对象 | 抛出任意对象 | 抛出自定义异常 )

    转载自:https://blog.csdn.net/shulianghan/article/details/100002073 文章目录 I 异常处理 II 字符串异常 III 异常对象 IV 抛出任 ...

最新文章

  1. 怎么卸载旧版本java_卸载旧的java-jdk安装新版本jdk
  2. Python 进阶:enum 模块源码分析
  3. 程序员像瞎子,产品经理像跛子
  4. C#中ref和out的使用小结
  5. ASP.NET五大核心对象解析
  6. sigmoid函数解决溢出_常见激活函数优缺点与dead relu problem
  7. java httpclient 进度条_java – 如何使用Apache HttpClient 4获取文件上传的进度条?
  8. 【信号与系统|吴大正】4:信号分解、傅里叶变换与信号谱(下)
  9. Ubuntu,Linux下goldendict词典安装及配置
  10. Ecshop二次开发
  11. 电脑如何更改设置本机IP地址
  12. mac抹掉磁盘重装系统未能与服务器取得联系_干活!苹果电脑安装mac系统详细教程...
  13. 计算机组成原理试题(三)(附参考答案)
  14. 小程序校园点餐系统外卖系统设计
  15. php微信授权ajax,ajax 实现微信网页授权登录
  16. DbVisualizer解决中文乱码问题
  17. Oracle中的TIMESTAMP类型解读(TIMESTAMP存储格式)
  18. BISHIMIANSHI
  19. 清北2021毕业生就业报告出炉 清华博士0人出国,70%进体制
  20. 【综述】近年来NLP在法律领域的相关研究工作

热门文章

  1. linux hid 设备驱动,linux hid驱动
  2. 南京技师学院计算机系,江苏南京技师学院
  3. thinksns java_社交系统ThinkSNS+技术概要
  4. 0基础学Linux-从小白到大牛(3)Linux命令
  5. 使用QE绘制Band Structure
  6. 有趣大会 · ACL2022 (Findings篇)
  7. [T-ARA][TIAMO]
  8. php版临时邮箱,Forsaken Mail创建临时邮箱系统| 手把手教程
  9. 我的那些年~小小少年~小屁孩
  10. 工作、求职需要记住的英文缩写,offer讨论避免尴尬