Mr.*_*eng 8 java activemq-classic spring-jms
有了Spring4 + ActiveMQ,我想从队列接收JMS消息,并自动转换为POJO.所以我添加MappingJackson2MessageConverter到DefaultJmsListenerContainerFactory
@Bean
public DefaultJmsListenerContainerFactory jmsListenerContainerFactory() {
DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
// some other config
MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter();
converter.setTargetType(MessageType.TEXT);
converter.setTypeIdPropertyName("???");
factory.setMessageConverter(converter);
return factory;
}
Run Code Online (Sandbox Code Playgroud)
这是我的Listener配置
@JmsListener(destination = "queue.fas.flight.order", containerFactory = "jmsListenerContainerFactory")
public void processOrder(OrderRegisterDto registerParam) {
System.out.println(registerParam.toString());
}
Run Code Online (Sandbox Code Playgroud)
问题是,我不知道如何设置TypeIdPropertyName.队列不在我的控制之下,其他人发送JSON给它.
我想要一个普通的转换器.所以我使用String接收消息,并手动将其转换为POJO.
Spring4 + ActiveMQ
还有更好的方法吗?
转换器期望发送方在消息属性中提供转换的类型信息.
String typeId = message.getStringProperty(this.typeIdPropertyName);
Run Code Online (Sandbox Code Playgroud)
typeId可以是类名,也可以是typeId映射图中条目的键.
如果您的消息不包含任何类型信息,则需要子类化转换器并覆盖getJavaTypeForMessage()以返回JavaType目标类的Jackson ,例如:
return TypeFactory.defaultInstance().constructType(Foo.class);
Run Code Online (Sandbox Code Playgroud)
如果它是常量而不依赖于消息中的某些信息,则可以在子类中创建静态字段.
| 归档时间: |
|
| 查看次数: |
4457 次 |
| 最近记录: |