当侦听器获取消息时,无法转换convertAndSend

时间:2016-10-19 21:17:27

标签: java jackson rabbitmq

我正在使用RabbitMQ将消息发送到队列,而在消费者中我得到它,但是我无法投射它。

当我发送它时,我会这样做。

rabbitTemplate.convertAndSend("myExchange", "binding", MyObject);

MyObject是在该项目中创建的自定义对象。在另一个项目中,我创建的MyObject.class完全相同(但我知道对象签名不一样)。

我的听众的转换集如下:

Jackson2JsonMessageConverter jsonMessageConverter() {
    Jackson2JsonMessageConverter messageConverter = new Jackson2JsonMessageConverter();
    messageConverter.setClassMapper(classMapper());

    return messageConverter;
}

private ClassMapper classMapper() {
    DefaultClassMapper classMapper = new DefaultClassMapper();
    classMapper.setDefaultType(MyObject.class);
    return classMapper;
}

所以,在我的听众中,以下代码不起作用。我注意到身体附带了[B@1232(byte[232]

@Override
public void onMessage(final Message message) {
    final MyObject myObject = (MyObject) messageConverter.fromMessage(message);

我如何实现这一目标?

2 个答案:

答案 0 :(得分:1)

将MyObject类放在一个单独的jar中。从发件人和收件人中引用这个新jar。

附加信息
String是一个对象。 将您的对象转换为json(在字符串中)并将jsonString作为convertAndSend的第三个参数传递。

在收件人中,您应该执行以下操作:

final String jsonString = (String) messageConverter.fromMessage(message);

答案 1 :(得分:1)

如果您希望将接收方消息作为json使用,请确保将发送方的MessageConverter设置为Jackson2JsonMessageConverter

Jackson2JsonMessageConverter messageConverter = ...; // create and configure

rabbitTemplate.setMessageConverter(messageConverter);
rabbitTemplate.convertAndSend("myExchange", "binding", MyObject);

否则default SimpleMessageConverter用于发送消息。

  

默认转换器是SimpleMessageConverter,它能够处理字节数组,字符串和可序列化对象,具体取决于消息内容类型标题。

所以我猜你的MyObjectSerializable,默认的MessageConverter将它序列化为一个字节数组。如你所说

  

所以,在我的听众中,以下代码并不起作用。我注意到身体带有[B @ 1232(字节[232]。