Spring AMQP 接收器的参数类型错误
Argument type error with Spring AMQP receiver
我的 Spring AMQP 应用程序在启动时记录了以下异常:
org.springframework.amqp.rabbit.listener.exception.ListenerExecutionFailedException: Failed to invoke target method 'receiveMessage' with argument type = [class [B], value = [{[B@660cff44}]
根据我的搜索,我了解到这是因为 class 与消息类型不兼容?但是,我看不到这是哪里。
以下是相关代码段:
@Bean
public MessageConverter jsonMessageConverter(){
return new Jackson2JsonMessageConverter();
}
@Bean
Queue queue() {
return new Queue(config.getAMQPResultsQueue(), false);
}
@Bean
TopicExchange exchange() {
return new TopicExchange(config.getAMQPResultsExchange());
}
@Bean
Binding binding(Queue queue, TopicExchange exchange) {
return BindingBuilder.bind(queue).to(exchange).with("#");
}
@Bean
SimpleMessageListenerContainer container(ConnectionFactory connectionFactory, MessageListenerAdapter listenerAdapter) {
SimpleMessageListenerContainer container = new SimpleMessageListenerContainer();
container.setConnectionFactory(connectionFactory);
container.setQueueNames(config.getAMQPResultsQueue());
container.setMessageListener(listenerAdapter);
container.setMessageConverter(jsonMessageConverter());
return container;
}
@Bean
MessageListenerAdapter listenerAdapter(Receiver receiver) {
return new MessageListenerAdapter(receiver, "receiveMessage");
}
和
@Component
public class Receiver {
public void receiveMessage(String message) {
System.out.println("Received <" + message + ">");
}
}
我试过将消息的 class 设置为 Byte[] 但结果是一样的。我确定我遗漏了一些简单的东西 - 只是不确定它是什么!
Jackson2JsonMessageConverter
仅在邮件具有包含 json
.
的 content_type
header 时才执行转换
否则会returnbyte[]
.
byte[]
也不会转换为Byte[]
。设置 header 或使用 byte[]
.
当我将 RabbitMQ 接口中的 属性 设置为 content-type
时,我 运行 陷入了这个问题(可以理解,因为 http 规范就是这样拼写的)。但是 RabbitMQ 有它的下划线。 content_type
是 属性 的名称,您必须在 RabbitMQ 界面中设置才能使用 HTTP Header Content-Type
发布消息
我的 Spring AMQP 应用程序在启动时记录了以下异常:
org.springframework.amqp.rabbit.listener.exception.ListenerExecutionFailedException: Failed to invoke target method 'receiveMessage' with argument type = [class [B], value = [{[B@660cff44}]
根据我的搜索,我了解到这是因为 class 与消息类型不兼容?但是,我看不到这是哪里。
以下是相关代码段:
@Bean
public MessageConverter jsonMessageConverter(){
return new Jackson2JsonMessageConverter();
}
@Bean
Queue queue() {
return new Queue(config.getAMQPResultsQueue(), false);
}
@Bean
TopicExchange exchange() {
return new TopicExchange(config.getAMQPResultsExchange());
}
@Bean
Binding binding(Queue queue, TopicExchange exchange) {
return BindingBuilder.bind(queue).to(exchange).with("#");
}
@Bean
SimpleMessageListenerContainer container(ConnectionFactory connectionFactory, MessageListenerAdapter listenerAdapter) {
SimpleMessageListenerContainer container = new SimpleMessageListenerContainer();
container.setConnectionFactory(connectionFactory);
container.setQueueNames(config.getAMQPResultsQueue());
container.setMessageListener(listenerAdapter);
container.setMessageConverter(jsonMessageConverter());
return container;
}
@Bean
MessageListenerAdapter listenerAdapter(Receiver receiver) {
return new MessageListenerAdapter(receiver, "receiveMessage");
}
和
@Component
public class Receiver {
public void receiveMessage(String message) {
System.out.println("Received <" + message + ">");
}
}
我试过将消息的 class 设置为 Byte[] 但结果是一样的。我确定我遗漏了一些简单的东西 - 只是不确定它是什么!
Jackson2JsonMessageConverter
仅在邮件具有包含 json
.
content_type
header 时才执行转换
否则会returnbyte[]
.
byte[]
也不会转换为Byte[]
。设置 header 或使用 byte[]
.
当我将 RabbitMQ 接口中的 属性 设置为 content-type
时,我 运行 陷入了这个问题(可以理解,因为 http 规范就是这样拼写的)。但是 RabbitMQ 有它的下划线。 content_type
是 属性 的名称,您必须在 RabbitMQ 界面中设置才能使用 HTTP Header Content-Type