如何解决业务对象的一些属性在被 MessageListener 接收时为 null
DirectMessage
的某些属性在被 MessageListener 接收时为空。某些导致接收时将值设置为 null 的原因。
Producer Class
public class MessageQueueTemplate extends JmsGatewaySupport{
void sendMessage(final DirectMessage directMessage) {
getJmsTemplate().send(new MessageCreator() {
public Message createMessage(Session session) throws JMSException {
ObjectMessage message = session.createObjectMessage();
message.setObject(directMessage);
return message;
}
});
}
}
MessageListener Implementation to consume message
public class MessageQueueListener implements MessageListener {
@Autowired
MessageOperations messageOperations;
@Override
public void onMessage(Message message) {
ObjectMessage objMsg = (ObjectMessage) message;
try {
DirectMessage dmObj = (DirectMessage) objMsg.getObject();
try {
messageOperations.handleMessage(dmObj);
} catch (DuplicateMessage duplicateMessage) {
duplicateMessage.printStackTrace();
}
} catch (JMSException e) {
throw JmsUtils.convertJmsAccessException(e);
}
}
}
Message Send Config
@Configuration
@EnableTransactionManagement
public class MessageQueueConfig {
@Bean
public ConnectionFactory connectionFactory() {
return new ActiveMQConnectionFactory("tcp://localhost:61616"); }
@Bean
public JmsTemplate jmsTemplate() {
JmsTemplate jmsTemplate = new JmsTemplate();
jmsTemplate.setConnectionFactory(connectionFactory());
jmsTemplate.setDefaultDestinationName("queue.message");
return jmsTemplate;
}
@Bean
public MessageQueueOperations messageQueueOperations() {
MessageQueueTemplate queueTemplate = new MessageQueueTemplate();
queueTemplate.setJmsTemplate(jmsTemplate());
return queueTemplate;
}
}
Message Listener Config
@Configuration
@EnableTransactionManagement
public class MessageQueueListenerConfig {
@Bean(name = "messageQueueListenerConnFactory")
public ConnectionFactory connectionFactory() {
ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");
connectionFactory.setTrustAllPackages(true);
return connectionFactory;
}
@Bean
public MessageQueueListenerTemplate messageQueueListenerTemplate() {
return new MessageQueueListenerTemplate(); }
@Bean
public DefaultJmsListenerContainerFactory orderDefaultJmsListenerContainerFactory() {
DefaultJmsListenerContainerFactory factory =
new DefaultJmsListenerContainerFactory();
factory
.setConnectionFactory(connectionFactory());
factory.setConcurrency("3-10");
return factory;
}
@Bean
public DefaultMessageListenerContainer container() {
SimpleJmsListenerEndpoint endpoint =
new SimpleJmsListenerEndpoint();
endpoint.setMessageListener(messageQueueListenerTemplate());
endpoint.setDestination("queue.message");
return orderDefaultJmsListenerContainerFactory()
.createListenerContainer(endpoint);
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。