2017-04-24 84 views
0

要求: - 带有Oracle AQ作为入站端点的JMS连接器。如何在定期间隔后重新连接JMS连接器

问题描述: - 如何在定期间隔后重新连接JMS连接器,以便重新连接时消耗队列中的新消息。

我曾尝试重新连接下面战略

-- JMS Connector defined 
     <jms:connector name="AQJMS" validateConnections="true" 
      maxRedelivery="-1" numberOfConsumers="1" durable="true" doc:name="JMS" 
      username="X" password="X" connectionFactory-ref="OAQTopicConnectionFactoryBean"> 
-- reconnect at 5 sec 
      <reconnect-forever frequency="5000"/> 
     </jms:connector> 
-- flow 
     <flow name="sendmessagetoqFlow"> 
-- jms inbound endpoint as oracle AQ 
      <jms:inbound-endpoint queue="QUEUE" 
       connector-ref="AQJMS" doc:name="AQJMS"> 
       <jms:client-ack-transaction action="BEGIN_OR_JOIN"/> 
      </jms:inbound-endpoint> 
      <logger message="Log 1 - #[message.inboundProperties]" level="INFO" doc:name="Logger 1"/> 
     </flow> 

但5秒后它不会重新连接。 你能帮我解决问题吗?

在此先感谢。

+0

一个JMS入站端点,尽快为他们提供接收消息。没有必要象查询数据库一样轮询队列。 – Yevgeniy

+0

我期待着你已经解释过相同的结果,但是用代码片段我没有得到结果,假设应用程序在mule studio中运行,并且我在后端队列中插入一条消息,消息没有被消耗,直到我重新启动请求者jms入站端点)。 –

+0

我使用ActiveMQ测试了您的配置,因为我的系统中没有Oracle AQ,并且我已经在后端插入ActiveMQ门户中的消息,并发现它没有任何问题。我还通过断开ActiveMQ服务器来测试连接。我发现一切工作正常与ActiveMQ –

回答

0

配置事务轮询(企业) 这对我的作品

<jms:connector ...cut...> 
     <service-overrides transactedMessageReceiver="com.mulesoft.mule.transport.jms.TransactedPollingJmsMessageReceiver" /> 
    </jms:connector> 

    <jms:inbound-endpoint queue="my.queue"> 
<ee:multi-transaction action="ALWAYS_BEGIN" timeout="30000"/> 
     <properties> 
       <spring:entry key="pollingFrequency" value="5000" /> 
     </properties> 
    </jms:inbound-endpoint> 
+0

我已经在jms连接器中添加了以下代码,并更改了事务类型作为jms端点中的多资源事务,现在它的工作正常,但是在从队列中消耗消息之后,异常被引发为JMS-131:Session被关闭 –