Rabbit消息侦听器的执行失败,并且未设置ErrorHandler.无法调用参数类型= [class [B]]的目标方法, [英] Execution of Rabbit message listener failed, and no ErrorHandler has been set. Failed to invoke target method with argument type = [class [B],
问题描述
我正在使用spring amqp rabbitmq,并使用
I am using spring amqp rabbitmq, and sending messages using
Message message = MessageBuilder
.withBody(item.toString().getBytes())
.setReplyTo("importReply")
.setCorrelationId(item.toString().getBytes()).build();
我的消息处理程序是
public class Foundation {
public Message importExchange(Message exchange) {
System.out.println("Command:" + exchange.getBody());
Message message = MessageBuilder
.withBody(exchange.getBody().toString().getBytes()).setCorrelationId(exchange.getMessageProperties().getCorrelationId() .toString().getBytes()).build();
return message;
}
}
我已经使用
<rabbit:listener-container
connection-factory="rabbitConnectionFactory" concurrency="10">
<rabbit:listener queues="${rabbitmq.import.queue}"
ref="foundation" method="importExchange" />
<rabbit:listener queues="${rabbitmq.import.reply.queue}"
ref="importExchangeItemWriter" method="replyHandler" />
</rabbit:listener-container>
但我的执行力不足
Execution of Rabbit message listener failed, and no ErrorHandler has been set.
org.springframework.amqp.rabbit.listener.ListenerExecutionFailedException: Failed to invoke target method 'importExchange' with argument type = [class [B], value = [{[B@427829d8}]
at org.springframework.amqp.rabbit.listener.adapter.MessageListenerAdapter.invokeListenerMethod(MessageListenerAdapter.java:483)
at org.springframework.amqp.rabbit.listener.adapter.MessageListenerAdapter.onMessage(MessageListenerAdapter.java:374)
at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.doInvokeListener(AbstractMessageListenerContainer.java:647)
at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.invokeListener(AbstractMessageListenerContainer.java:573)
at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.access$001(SimpleMessageListenerContainer.java:75)
at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer$1.invokeListener(SimpleMessageListenerContainer.java:154)
at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.invokeListener(SimpleMessageListenerContainer.java:1111)
at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.executeListener(AbstractMessageListenerContainer.java:556)
at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.doReceiveAndExecute(SimpleMessageListenerContainer.java:904)
at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.receiveAndExecute(SimpleMessageListenerContainer.java:888)
at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.access$500(SimpleMessageListenerContainer.java:75)
at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer$AsyncMessageProcessingConsumer.run(SimpleMessageListenerContainer.java:989)
at java.lang.Thread.run(Thread.java:744)
Caused by: java.lang.NoSuchMethodException: com.stockopedia.symfony.Foundation.importExchange([B)
at java.lang.Class.getMethod(Class.java:1665)
at org.springframework.util.MethodInvoker.prepare(MethodInvoker.java:178)
at org.springframework.amqp.rabbit.listener.adapter.MessageListenerAdapter.invokeListenerMethod(MessageListenerAdapter.java:466)
... 12 more
类似的问题也出现在生产者端的ReplyHandler
and the similar issue is also on producer side replyHandler
public void replyHandler(Message message) {
System.out.println("In Reply Handler:" + message.getMessageProperties().getCorrelationId());
}
此外,如果importExchange中存在任何异常,如何在replyHandler中获取异常?
Also, how can I get exception in replyHandler if there is any exception in importExchange ?
推荐答案
由于您使用POJO进行消息侦听,因此无法处理消息.
Since you are using POJO for message listening you can't get deal with messages.
您的Foundation#importExchange
应该接受消息正文(在您的情况下,为byte[]
)
并返回适合于回复邮件正文的内容.
Your Foundation#importExchange
should accept message body (in your case byte[]
)
and return something appropriate to be for reply message body.
replyHandler
只需实现MessageListener
.
该框架将为您做相关的事情.
The Framework will do for you the correlation stuff.
这篇关于Rabbit消息侦听器的执行失败,并且未设置ErrorHandler.无法调用参数类型= [class [B]]的目标方法,的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!