业务对象的一些属性在被 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 (将#修改为@)