【发布时间】:2017-01-19 12:14:03
【问题描述】:
我在接收来自 RabbitMQ 的消息时遇到问题。 我正在发送如下消息
HashMap<Object, Object> senderMap=new HashMap<>();
senderMap.put("STATUS", "SUCCESS");
senderMap.put("EXECUTION_START_TIME", new Date());
rabbitTemplate.convertAndSend(Constants.ADAPTOR_OP_QUEUE,senderMap);
如果我们在 RabbitMQ 中看到,我们将得到一个完全限定的类型。
在当前场景中,我们有 n 个生产者用于同一个消费者。如果我使用任何映射器,它会导致异常。 我将如何发送一条消息,使其不包含任何 type_id,并且我可以将消息作为 Message 对象接收,然后我可以将其绑定到接收器中的自定义对象。
我收到如下消息。 您能否让我知道如何使用 Jackson2MessageConverter 以便消息从接收端直接绑定到我的 Object/HashMap。我现在也从发件人那里删除了 Type_ID。
消息在 RabbitMQ 中的外观
优先级:0 交付模式:2 标头:
ContentTypeId:java.lang.Object KeyTypeId:java.lang.Object content_encoding:UTF-8 content_type:application/json {"Execution_start_time":1473747183636,"status":"SUCCESS"}
@Component
public class AdapterOutputHandler {
private static Logger logger = Logger.getLogger(AdapterOutputHandler.class);
@RabbitListener(containerFactory="adapterOPListenerContainerFactory",queues=Constants.ADAPTOR_OP_QUEUE)
public void handleAdapterQueueMessage(HashMap<String,Object> message){
System.out.println("Receiver:::::::::::"+message.toString());
}
}
连接
@Bean(name="adapterOPListenerContainerFactory")
public SimpleRabbitListenerContainerFactory adapterOPListenerContainerFactory() {
SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
factory.setConnectionFactory(connectionFactory());
Jackson2JsonMessageConverter messageConverter = new Jackson2JsonMessageConverter();
DefaultClassMapper classMapper = new DefaultClassMapper();
messageConverter.setClassMapper(classMapper);
factory.setMessageConverter(messageConverter);
}
例外
Caused by: org.springframework.amqp.support.converter.MessageConversionException: failed to convert Message content. Could not resolve __TypeId__ in header and no defaultType provided
at org.springframework.amqp.support.converter.DefaultClassMapper.toClass(DefaultClassMapper.java:139)
我不想使用来自发件人的 __TYPE__ID,因为它们是同一个队列的多个发件人,并且只有一个消费者。
【问题讨论】:
-
导致异常信息不足。请添加堆栈跟踪
-
其实 rabbitmq 中的 headers 包含一个名为 type_id_ 的属性。这不应该。 如何发送不存在 type_id_ 属性的消息
priority: 0 delivery_mode: 2 __TypeId__: com.diff.approach.JobListenerDTO** content_encoding: UTF-8 content_type: application/json
标签: rabbitmq spring-amqp spring-rabbit