2

ESB への永続ストレージとして Apache ActiveMQ 5.5.1 を使用して、Red Hat 2.6.32 で Sun Java SE 1.6.0_33 で WSO2 ESB 4.5.1 を実行しています。


1. XML ファイルからアドレス情報を読み取る
2. 各アドレスを MQ キューに保存する
3. Message Processor に MQ から読み取らせ、JMS エンドポイントへの配信を試みる4.
配信が失敗した場合、メッセージプロセッサは、自身を非アクティブ化する前にもう 1 回配信を試行します

JMS エンドポイント (別のサーバーで実行されている別の ActiveMQ インスタンス) が稼働している場合はすべて正常に動作しますが、JMS エンドポイントとして機能している ActiveMQ を停止すると、メッセージ プロセッサは 1 回の再試行後に期待どおりに非アクティブ化されず、継続的に再送信を試みます。メッセージストアからの同じメッセージ。何がうまくいかないのですか?

これが私が持っている流れです:

プロキシー:

<proxy xmlns="http://ws.apache.org/ns/synapse" name="AddressPxy" transports="vfs" statistics="disable" trace="disable" startOnLoad="true">
<target>
  <inSequence>
     <property name="OUT_ONLY" value="true" scope="default" type="STRING"/>
     <property name="target.endpoint" value="AddressesEP" scope="default" type="STRING"/>
     <log level="full"/>
     <iterate expression="//addresses/address">
        <target>
           <sequence>
              <store messageStore="AddressesMS"/>
           </sequence>
        </target>
      </iterate>
    </inSequence>
  </target>
  <parameter name="transport.vfs.ActionAfterProcess">MOVE</parameter>
  <parameter name="transport.PollInterval">15</parameter>
  <parameter name="transport.vfs.MoveAfterProcess">file:///home/esb/sent</parameter>
  <parameter name="transport.vfs.FileURI">file:///home/esb/addresses.xml</parameter>
  <parameter name="transport.vfs.MoveAfterFailure">file:///home/esb/fail</parameter>
  <parameter name="transport.vfs.ContentType">application/xml</parameter>
  <parameter name="transport.vfs.ActionAfterFailure">MOVE</parameter>
  <description></description>
</proxy>

メッセージストア:

<messageStore name="AddressesMS" class="org.wso2.carbon.message.store.persistence.jms.JMSMessageStore" xmlns="http://ws.apache.org/ns/synapse">
  <parameter name="java.naming.factory.initial">org.apache.activemq.jndi.ActiveMQInitialContextFactory</parameter>
  <parameter name="java.naming.provider.url">tcp://localhost:61616</parameter>
  <parameter name="store.jms.JMSSpecVersion">1.1</parameter>
  <parameter name="store.jms.cache.connection">false</parameter>
</messageStore> 

メッセージ プロセッサ:

<messageProcessor name="AddressesMP" class="org.apache.synapse.message.processors.forward.ScheduledMessageForwardingProcessor" messageStore="AddressesMS" xmlns="http://ws.apache.org/ns/synapse">
  <parameter name="interval">10000</parameter>
  <parameter name="max.delivery.attempts">1</parameter>
</messageProcessor> 

終点:

<endpoint xmlns="http://ws.apache.org/ns/synapse" name="AddressesEP">
  <address uri="jms:/Addresses?transport.jms.ConnectionFactoryJNDIName=QueueConnectionFactory&java.naming.factory.initial=org.apache.activemq.jndi.ActiveMQInitialContextFactory&java.naming.provider.url=tcp://rhdev001:61616&transport.jms.DestinationType=queue">
  </address>
</endpoint>

wso2carbon.log に次のエラー メッセージが表示されます。

TID: [0] [ESB] [2012-11-07 02:58:07,396] ERROR {org.apache.axis2.transport.jms.JMSSender} -  Unable to create a JMSMessageSender for : null {org.apache.axis2.transport.jms.JMSSender}  
javax.jms.JMSException: Could not connect to broker URL: tcp://rhdev001:61616. Reason: java.net.ConnectException: Connection refused  
TID: [0] [ESB] [2012-11-07 02:58:07,398] ERROR {org.apache.synapse.message.processors.forward.BlockingMessageSender} -  Error sending Message to url : jms:/Addresses?transport.jms.ConnectionFactoryJNDIName=QueueConnectionFactory&java.naming.factory.initial=org.apache.activemq.jndi.ActiveMQInitialContextFactory&java.naming.provider.url=tcp://rhdev001:61616&transport.jms.DestinationType=queue {org.apache.synapse.message.processors.forward.BlockingMessageSender}  
org.apache.axis2.AxisFault: Unable to create a JMSMessageSender for : null  
TID: [0] [ESB] [2012-11-07 02:58:07,399] ERROR {org.apache.synapse.message.processors.forward.ForwardingJob} -  Error Forwarding Message  {org.apache.synapse.message.processors.forward.ForwardingJob}  
java.lang.Exception: Error while Sending Message

誰かが私を助けてくれることを願っています!

4

1 に答える 1

0

このバージョンの ESB では、メッセージ プロセッサの "max.delivery.attempts" パラメータに若干の問題があります。ただし、ソース ビューに移動し、「max.delivery.attempts」を「max.deliver.attempts」に変更することで、これを機能させることができます。

于 2012-11-22T05:46:10.253 に答える