java - rabbitmq 抛出 AmqpException : No method found for class [B

标签 java spring-boot rabbitmq

当我向 RabbitMQ 发送消息时,它会抛出一个 AmqpException for 循环:

org.springframework.amqp.rabbit.listener.exception.ListenerExecutionFailedException

    : Listener method 'no match' threw exception
        at org.springframework.amqp.rabbit.listener.adapter.MessagingMessageListenerAdapter.invokeHandler(MessagingMessageListenerAdapter.java:198) ~[spring-rabbit-2.1.2.RELEASE.jar:2.1.2.RELEASE]
        at org.springframework.amqp.rabbit.listener.adapter.MessagingMessageListenerAdapter.onMessage(MessagingMessageListenerAdapter.java:127) ~[spring-rabbit-2.1.2.RELEASE.jar:2.1.2.RELEASE]
        at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.doInvokeListener(AbstractMessageListenerContainer.java:1521) ~[spring-rabbit-2.1.2.RELEASE.jar:2.1.2.RELEASE]
        at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.actualInvokeListener(AbstractMessageListenerContainer.java:1444) ~[spring-rabbit-2.1.2.RELEASE.jar:2.1.2.RELEASE]
        at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.invokeListener(AbstractMessageListenerContainer.java:1431) ~[spring-rabbit-2.1.2.RELEASE.jar:2.1.2.RELEASE]
        at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.executeListener(AbstractMessageListenerContainer.java:1410) ~[spring-rabbit-2.1.2.RELEASE.jar:2.1.2.RELEASE]
        at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.doReceiveAndExecute(SimpleMessageListenerContainer.java:848) [spring-rabbit-2.1.2.RELEASE.jar:2.1.2.RELEASE]
        at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.receiveAndExecute(SimpleMessageListenerContainer.java:832) [spring-rabbit-2.1.2.RELEASE.jar:2.1.2.RELEASE]
        at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.access$700(SimpleMessageListenerContainer.java:78) [spring-rabbit-2.1.2.RELEASE.jar:2.1.2.RELEASE]
        at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer$AsyncMessageProcessingConsumer.run(SimpleMessageListenerContainer.java:1073) [spring-rabbit-2.1.2.RELEASE.jar:2.1.2.RELEASE]
        at java.lang.Thread.run(Thread.java:748) [na:1.8.0_152]
    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.2.RELEASE.jar:2.1.2.RELEASE]
        at org.springframework.amqp.rabbit.listener.adapter.DelegatingInvocableHandler.invoke(DelegatingInvocableHandler.java:129) ~[spring-rabbit-2.1.2.RELEASE.jar:2.1.2.RELEASE]
        at org.springframework.amqp.rabbit.listener.adapter.HandlerAdapter.invoke(HandlerAdapter.java:60) ~[spring-rabbit-2.1.2.RELEASE.jar:2.1.2.RELEASE]
        at org.springframework.amqp.rabbit.listener.adapter.MessagingMessageListenerAdapter.invokeHandler(MessagingMessageListenerAdapter.java:190) ~[spring-rabbit-2.1.2.RELEASE.jar:2.1.2.RELEASE]
        ... 10 common frames omitted

我尝试添加类级别的@RabbitListener,但没有成功

@Component
@RabbitListener(queues = "test", containerFactory="rabbitListenerContainerFactory")
public class ReceiverTwo {

    @RabbitHandler
    public void process(String message) {
        System.out.println("Receiver: " + message);
    }
}

生产者方:

@Test
public void publishTest() throws IOException {
    channel.exchangeDeclare("testExchange", "direct", true);
    channel.queueBind("many", "testExchange", "many");
    String message = "The test message";
    channel.basicPublish("testExchange", "test",null, message.getBytes());
}

消费者方面:

@Component
@RabbitListener(queues = "test")
public class ReceiverTwo {
    @RabbitHandler
    public void process(String message) {
        System.out.println("Receiver: " + message);
    }
}

最佳答案

您发送字节数组并尝试接收字符串。

process(String message) 更改为 process(byte[] message)

其他选项是设置

MessageProperties messageProperties = new MessageProperties();
messageProperties.setContentType(MessageProperties.CONTENT_TYPE_TEXT_PLAIN);
messageProperties.setContentEncoding(this.defaultCharset);

并将其传递给

channel.basicPublish("testExchange", "test", messageProperties, message.getBytes());

引用 SimpleMessageConverter.createMessage

或者您可以使用 RabbitTemplate 它会为您完成。

关于java - rabbitmq 抛出 AmqpException : No method found for class [B,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54457496/

相关文章:

java - 使用 equals() 将包装类与原语进行比较会产生奇怪的行为

python - 使用pip安装包后找不到rabbitmq

java - 如何支持连接池供应商特定的 DataSourceProperties 配置

spring-boot - Spring 启动 : How to properly send error logs to Stackdriver on GCP

java - 配置 Jackson 而不是使用 DateTimeFormat.ISO.DATE - 不工作

rabbitmq - 队列在 RabbitMQ 集群中应该如何分布?

scala - Op-Rabbit 在 Akka Http 中使用 Spray-Json

java - 使用 Spring MVC 通过 AJAX 发送 HTML 数据

java - 将字符串列表传递给 Java 方法

java - 如何通过 REST (JAX-RS) 在 web.xml 中声明多个包?