我想我错过了一些东西在这里..我试图创建一个简单的兔子listner,可以接受自定义对象作为消息类型。现在根据文件,它说
- 在1.6之前的版本中,必须在消息头中提供用于转换JSON的类型信息,或者需要自定义ClassMapper。从1.6版本开始,如果没有类型信息头,则可以从目标方法参数推断类型。*
我在 Jmeter 板中使用rabbit mq adm手动将消息放入队列中,出现如下错误
Caused by: org.springframework.messaging.converter.MessageConversionException: Cannot convert from [[B] to [com.example.Customer] for GenericMessage [payload=byte[21], headers={amqp_receivedDeliveryMode=NON_PERSISTENT, amqp_receivedRoutingKey=customer, amqp_deliveryTag=1, amqp_consumerQueue=customer, amqp_redelivered=false, id=81e8a562-71aa-b430-df03-f60e6a37c5dc, amqp_consumerTag=amq.ctag-LQARUDrR6sUcn7FqAKKVDA, timestamp=1485635555742}]
我的配置:
@Bean
public ConnectionFactory connectionFactory() {
CachingConnectionFactory connectionFactory = new CachingConnectionFactory("localhost");
connectionFactory.setUsername("test");
connectionFactory.setPassword("test1234");
connectionFactory.setVirtualHost("/");
return connectionFactory;
}
@Bean
RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory) {
RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);
rabbitTemplate.setMessageConverter(new Jackson2JsonMessageConverter());
return rabbitTemplate;
}
@Bean
public AmqpAdmin amqpAdmin() {
RabbitAdmin rabbitAdmin = new RabbitAdmin(connectionFactory());
return rabbitAdmin;
}
@Bean
public Jackson2JsonMessageConverter jackson2JsonMessageConverter() {
return new Jackson2JsonMessageConverter();
}
另一个问题是,此异常消息不会放回队列中。
我使用的是 Spring Boot 1.4,它带来了amqp 1.6.1。
Edit1:我添加了Jacksonconverter(Spring Boot 不需要prob),并在rmq admin上给出了contenty类型,但仍然得到了下面的内容,正如你在上面看到的,我还没有配置任何侦听器容器。
Caused by: org.springframework.messaging.converter.MessageConversionException: Cannot convert from [[B] to [com.example.Customer] for GenericMessage [payload=byte[21], headers={amqp_receivedDeliveryMode=NON_PERSISTENT, amqp_receivedRoutingKey=customer, content_type=application/json, amqp_deliveryTag=3, amqp_consumerQueue=customer, amqp_redelivered=false, id=7f84d49d-037a-9ea3-e936-ed5552d9f535, amqp_consumerTag=amq.ctag-YSemzbIW6Q8JGYUS70WWtA, timestamp=1485643437271}]
2条答案
按热度按时间jtw3ybtb1#
如果使用boot,只需将
Jackson2JsonMessageConverter
@Bean
添加到配置中,它就会自动连接到侦听器(只要它是唯一的转换器)。如果使用管理控制台发送消息,则需要将content_type
属性设置为application/json
。默认情况下,转换错误被视为致命错误,因为通常没有理由重试;否则它们会一直循环下去。
这里有一个工作启动应用程序...
我发了这条信息
结果是:
引导将为您定义一个管理员和模板。
wljmcqd82#
遇到了同样的问题,结果是,git stash/merge把我的配置搞得一团糟,我需要再次把这个包包含在我的main中: