我正在使用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);
我如何实现这一目标?
答案 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,它能够处理字节数组,字符串和可序列化对象,具体取决于消息内容类型标题。
所以我猜你的MyObject
是Serializable
,默认的MessageConverter
将它序列化为一个字节数组。如你所说
所以,在我的听众中,以下代码并不起作用。我注意到身体带有[B @ 1232(字节[232]。