无限循环抛出 No method found for class [B 这个异常
问题描述
- 写入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 这个异常相关推荐
- 错误记录一:线程通信时抛出Exception in thread “Thread-0” java.lang.IllegalMonitorStateException异常
错误记录一:线程通信时抛出Exception in thread "Thread-0" java.lang.IllegalMonitorStateException异常 完整异常: ...
- Springboot 抛出Failed to determine a suitable driver class异常原因
Springboot 抛出Failed to determine a suitable driver class异常原因 参考文章: (1)Springboot 抛出Failed to determi ...
- oracle异常抛出,ORACLE 存储过程异常捕获并抛出
for tab_name in tables loop execute immediate 'drop table '||tab_name; --此处可能会报错 end loop; 当前情况是,循环表 ...
- 【C++ 语言】异常 ( 抛出字符串异常 | 抛出异常对象 | 抛出任意对象 | 抛出自定义异常 )
文章目录 I 异常处理 II 字符串异常 III 异常对象 IV 抛出任意类型对象 V 自定义异常 VI 异常相关代码 I 异常处理 1. 异常处理 : 使用 " try{}catch(){ ...
- Effective Java之抛出与抽象相应的异常(六十一)
1.如何处理异常? 方法B抛出了一个受检的异常 ,那么方法A在内部调用方法B时,面对方法B抛出的受检异常,可以选择继续抛出向上传播这个异常,也可以捕获这个异常进行处理.究竟是向上传播抛出,还是捕获处理 ...
- 异常全家桶来咯,异常捕获,异常抛出,自定义异常
1.捕获异常: 在Java中,凡是可能抛出异常的语句,都可以用try...catch捕获.把可能发生异常的语句放在try{...}中,然后使用catch捕获对应的Exception及其子类. 1.多c ...
- js手动抛错_javascript如何抛出错误?
程序的非正常运行状态被称为"异常"或"错误",解释器会为每个错误情形创建并抛出一个Error对象,其中包含错误的描述信息. ECMAScript 定义了六种类型 ...
- java 捕捉的异常抛出_Java异常抛出和捕获
Java中把非正常情况分为两种,异常(Exception)和错误(Error). 异常.png Error:一般是指与虚拟机相关的问题(虚拟机错误.线程死锁等),这种错误无法回复或不可能捕获 Exce ...
- 【C++ 语言】异常 ( 抛出字符串异常 | 抛出异常对象 | 抛出任意对象 | 抛出自定义异常 )
转载自:https://blog.csdn.net/shulianghan/article/details/100002073 文章目录 I 异常处理 II 字符串异常 III 异常对象 IV 抛出任 ...
最新文章
- 怎么卸载旧版本java_卸载旧的java-jdk安装新版本jdk
- Python 进阶:enum 模块源码分析
- 程序员像瞎子,产品经理像跛子
- C#中ref和out的使用小结
- ASP.NET五大核心对象解析
- sigmoid函数解决溢出_常见激活函数优缺点与dead relu problem
- java httpclient 进度条_java – 如何使用Apache HttpClient 4获取文件上传的进度条?
- 【信号与系统|吴大正】4:信号分解、傅里叶变换与信号谱(下)
- Ubuntu,Linux下goldendict词典安装及配置
- Ecshop二次开发
- 电脑如何更改设置本机IP地址
- mac抹掉磁盘重装系统未能与服务器取得联系_干活!苹果电脑安装mac系统详细教程...
- 计算机组成原理试题(三)(附参考答案)
- 小程序校园点餐系统外卖系统设计
- php微信授权ajax,ajax 实现微信网页授权登录
- DbVisualizer解决中文乱码问题
- Oracle中的TIMESTAMP类型解读(TIMESTAMP存储格式)
- BISHIMIANSHI
- 清北2021毕业生就业报告出炉 清华博士0人出国,70%进体制
- 【综述】近年来NLP在法律领域的相关研究工作
热门文章
- linux hid 设备驱动,linux hid驱动
- 南京技师学院计算机系,江苏南京技师学院
- thinksns java_社交系统ThinkSNS+技术概要
- 0基础学Linux-从小白到大牛(3)Linux命令
- 使用QE绘制Band Structure
- 有趣大会 · ACL2022 (Findings篇)
- [T-ARA][TIAMO]
- php版临时邮箱,Forsaken Mail创建临时邮箱系统| 手把手教程
- 我的那些年~小小少年~小屁孩
- 工作、求职需要记住的英文缩写,offer讨论避免尴尬