参考了一下官方的例子,发现整合RabbitMQ挺简单的,代码如下
@Component
@RabbitListener(queues = "queue2")
public class FanoutReceiverA {
@RabbitHandler
public void process(String message) {
System.err.println("fanout Receiver 2: " + message);
}
}
但是当我从RabbitMQ的后台给这个队列发送消息的时候,却一直重复报错,
Caused by: org.springframework.amqp.AmqpException: No method found for class
WARN[0;39m [35m71876[0;39m [2m---[0;39m [2m[cTaskExecutor-1][0;39m [36ms.a.r.l.ConditionalRejectingErrorHandler[0;39m [2m:[0;39m Execution of Rabbit message listener failed.
org.springframework.amqp.rabbit.listener.exception.ListenerExecutionFailedException: Listener threw exception
at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.wrapToListenerExecutionFailedExceptionIfNeeded(AbstractMessageListenerContainer.java:1569) ~[spring-rabbit-2.1.0.RELEASE.jar:2.1.0.RELEASE]
at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.doInvokeListener(AbstractMessageListenerContainer.java:1480) ~[spring-rabbit-2.1.0.RELEASE.jar:2.1.0.RELEASE]
at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.actualInvokeListener(AbstractMessageListenerContainer.java:1400) ~[spring-rabbit-2.1.0.RELEASE.jar:2.1.0.RELEASE]
at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.invokeListener(AbstractMessageListenerContainer.java:1387) ~[spring-rabbit-2.1.0.RELEASE.jar:2.1.0.RELEASE]
at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.executeListener(AbstractMessageListenerContainer.java:1366) ~[spring-rabbit-2.1.0.RELEASE.jar:2.1.0.RELEASE]
at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.doReceiveAndExecute(SimpleMessageListenerContainer.java:848) [spring-rabbit-2.1.0.RELEASE.jar:2.1.0.RELEASE]
at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.receiveAndExecute(SimpleMessageListenerContainer.java:832) [spring-rabbit-2.1.0.RELEASE.jar:2.1.0.RELEASE]
at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.access$700(SimpleMessageListenerContainer.java:78) [spring-rabbit-2.1.0.RELEASE.jar:2.1.0.RELEASE]
at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer$AsyncMessageProcessingConsumer.run(SimpleMessageListenerContainer.java:1073) [spring-rabbit-2.1.0.RELEASE.jar:2.1.0.RELEASE]
at java.lang.Thread.run(Thread.java:748) [na:1.8.0_161]
Caused by: org.springframework.amqp.AmqpException: No method found for class [B
at org.springframework.amqp.rabbit.listener.adapter.DelegatingInvocableHandler.getHandlerForPayload(DelegatingInvocableHandler.java:149) ~[spring-rabbit-2.1.0.RELEASE.jar:2.1.0.RELEASE]
at org.springframework.amqp.rabbit.listener.adapter.DelegatingInvocableHandler.getMethodNameFor(DelegatingInvocableHandler.java:253) ~[spring-rabbit-2.1.0.RELEASE.jar:2.1.0.RELEASE]
at org.springframework.amqp.rabbit.listener.adapter.HandlerAdapter.getMethodAsString(HandlerAdapter.java:71) ~[spring-rabbit-2.1.0.RELEASE.jar:2.1.0.RELEASE]
at org.springframework.amqp.rabbit.listener.adapter.MessagingMessageListenerAdapter.invokeHandler(MessagingMessageListenerAdapter.java:198) ~[spring-rabbit-2.1.0.RELEASE.jar:2.1.0.RELEASE]
at org.springframework.amqp.rabbit.listener.adapter.MessagingMessageListenerAdapter.onMessage(MessagingMessageListenerAdapter.java:127) ~[spring-rabbit-2.1.0.RELEASE.jar:2.1.0.RELEASE]
at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.doInvokeListener(AbstractMessageListenerContainer.java:1477) ~[spring-rabbit-2.1.0.RELEASE.jar:2.1.0.RELEASE]
... 8 common frames omitted
无奈只能在网上查找资料,也有人遇到这个坑,原来将@RabbitListener(queues = "queue2")这个注解放到方法上就可以了
@Component
public class FanoutReceiverA {
@RabbitListener(queues = "queue2")
@RabbitHandler
public void process(Message message) {
String body;
try {
body = new String(message.getBody(),"UTF-8");
System.err.println("fanout Receiver 2: " + body);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
}
再次从RabbitMQ后台发送消息,能正常监听并消费消息