【问题标题】:JMSTemplate and DefaultMessageListenerContainerJMSTemplate 和 DefaultMessageListenerContainer
【发布时间】:2017-07-27 22:53:56
【问题描述】:

我在 Redhat ActiveMQ 中有 2 个队列,一个用于消费,另一个用于生产和消费对象消息。

一旦从主队列被消费,它就会被推送到第二个队列进行进一步处理,但是在使用 JmsTemplate 时,消息会随机丢失,

我在 DMLC 容器的 2 和 JmsTemplate 上使用与 ActiveMQConnectionFactory 相同的 Bean

让我知道如何确保消息不会在 JmsTemplate 中丢失。

【问题讨论】:

    标签: spring spring-jms


    【解决方案1】:

    我会仔细检查没有其他人检查您拥有的队列中的消息。如果在某种开发环境中,您有多个正在运行的应用程序实例 - 它们可能会竞争消息。可能是另一个开发人员使用与 ActiveMQ 或开发/阶段环境相同的连接字符串启动应用程序的另一个实例。

    【讨论】:

    • 感谢您的回复,但是没有其他设置或环境正在运行,日志显示消息已进入第二个队列,后来它从未被取消队列,因为看起来消息没有进入队列中,在此期间 ActiveMQ 代理也没有错误。不确定是否必须添加任何额外的故障转移参数或与 ActiveMQ ConnectionFactory 有任何关系。
    • 知道了。你能在这里发布你的连接工厂参数吗?
    • @Bean public ActiveMQConnectionFactory amqConnectionFactory() { final ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(); connectionFactory.setBrokerURL(brokerUrl); connectionFactory.setPassword(密码); connectionFactory.setUserName(user); connectionFactory.setTrustAllPackages(true); connectionFactory.setRedeliveryPolicy(redeliveryPolicy());返回连接工厂; }
    • @Bean public JmsTemplate jmsTemplateAnotherQueue() { final JmsTemplate template = new JmsTemplate();模板.setDefaultDestinationName(anotherQueue);模板.setSessionTransacted(true);模板.setConnectionFactory(amqConnectionFactory());返回模板; }
    • public void sendAnotherMessage(final MessageObject messageObj) throws JMSException{ if (messageObj != null) { jmsTemplateanotherQueue.send(new MessageCreator(){ public Message createMessage(final Session session) throws JMSException LOGGER.info( "发送 obj 消息"); ObjectMessage message = session.createObjectMessage(); message.setLongProperty(ScheduledMessage.AMQ_SCHEDULED_DELAY, Long.valueOf(amqDelay)); message.setObject(messageObj); 返回消息; } } }); }
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-25
    • 1970-01-01
    • 2014-05-19
    相关资源
    最近更新 更多