Java 兔子消息侦听器执行失败,未设置ErrorHandler。调用参数类型为[class[B]的目标方法失败,
我正在使用spring amqp rabbitmq,并使用Java 兔子消息侦听器执行失败,未设置ErrorHandler。调用参数类型为[class[B]的目标方法失败,,java,spring,rabbitmq,spring-amqp,Java,Spring,Rabbitmq,Spring Amqp,我正在使用spring amqp rabbitmq,并使用 Message message = MessageBuilder .withBody(item.toString().getBytes()) .setReplyTo("importReply") .setCorrelationId(item.toString().getBytes()).build(); 我的消息处理程序是 public class Foundation { public Message importEx
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>
同样的问题也发生在制片人方面
public void replyHandler(Message message) {
System.out.println("In Reply Handler:" + message.getMessageProperties().getCorrelationId());
}
另外,如果importExchange中存在异常,我如何在replyHandler中获取异常?由于您使用POJO进行消息侦听,因此无法处理消息 您的
基金会#importExchange
应该接受消息正文(在您的情况下是字节[]
)
并返回适合作为回复消息正文的内容
replyHandler
只需实现MessageListener
该框架将为您提供相关内容。或者您可以添加
.setContentType=“text/plain”
转换器将能够为您转换为字符串。刚刚更新了importExchange,我想将message对象发送回replyHandler以检查相关性,我看到了。只需尝试按照我的建议执行我想按照用例进行相关性,我想先异步发送所有消息,而不等待答复,然后再发送等待回复。我希望我的replyHandler使用回复消息触发,我应该知道我收到的是哪封邮件的回复。通过关联和回复,你做的一切都是正确的。你的问题是POJO。只需将replyHandler
设置为MessageListener
,你就会正确地收到回复消息。但是你的importExchange
不应该处理消息
对象。还有一个小问题,如果importExchange中有异常,我如何在replyHandler中获取异常?是的,我做了同样的事情。谢谢
public void replyHandler(Message message) {
System.out.println("In Reply Handler:" + message.getMessageProperties().getCorrelationId());
}