0

AcitveMQ 5.13 を使用して Wildfly 9.0.1 で実行されている春の統合 (4.1.6) アプリがあります。私は約11のキューしか使用していません。

スタックしているキューが 1 つあり、メッセージが消費されません (ほとんど)。私が持っている他のすべてのキューは、インバウンドチャネルアダプターのポーラーでスケジュールどおりに正常に消費されます.

現在の Spring Integration 構成は次のようになります。

<beans:bean id="gnfReportConnectionFactory" class="org.springframework.jms.connection.CachingConnectionFactory">
    <beans:property name="targetConnectionFactory">
        <beans:bean class="org.apache.activemq.ActiveMQConnectionFactory" >
            <beans:property name="brokerURL" value="${activemq.broker.url}" />
            <beans:property name="checkForDuplicates" value="false" />
        </beans:bean>
    </beans:property>
    <beans:property name="sessionCacheSize" value="100" />
    <beans:property name="cacheProducers" value="true" />
    <beans:property name="cacheConsumers" value="true" />
    <beans:property name="reconnectOnException" value="true" />
</beans:bean>

<!-- Email Router -->
<channel id="gnfChannelIn" />
<channel id="gnfChannelOut" />

<beans:bean id="gnfReportQueue" class="org.apache.activemq.command.ActiveMQQueue">
    <beans:constructor-arg value="${gnf.report.queue}" name="name" />
</beans:bean>

<int-jms:inbound-channel-adapter id="gnfReportChannelAdapter" connection-factory="gnfReportConnectionFactory" destination="gnfReportQueue" channel="gnfChannelIn" auto-startup="true">
    <poller fixed-delay="60" time-unit="SECONDS" max-messages-per-poll="-1" receive-timeout="10000" />
</int-jms:inbound-channel-adapter> 

興味深いことの 1 つは、ほとんどの場合、キュー内のメッセージが消費される原因となるすべて (ActiveMQ と Wildfly) をバウンスすることです。場合によっては、Wildfly をバウンスするだけでメッセージの消費がトリガーされることがあります。そして、そのままにしておくと、メッセージが消費されてしまうこともあります。メッセージは単純な XML です。

私が使用している他のキューはすべて同じ方法で構成されています。

誰かが何かおかしなことを見ることができますか、または誰かが似たようなことに遭遇して解決しましたか?

4

1 に答える 1

1

最も一般的な原因は、ポーラー スレッドのハング (ユーザー コードでスタック) です。つまり、下流の何かgnfChannelInがスレッドをぶら下げています。

jstack または jvisualvm/jconsole を使用してスレッド ダンプを取得し、スレッドの動作を確認します。

于 2016-01-22T20:51:56.133 に答える