0

JMS キューのサンプル アプリケーションを試していました。フラグが true に設定されるまで、キューに入っているメッセージをそのままにしておきたいです。次の構成でスプリング フレームワークと MDP リスナーを使用しています。

サーバー-context.xml:

<bean id="MDPListener" class="controller.MDPListener"></bean>

<bean id="connectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
        <property name="brokerURL">
        <value>tcp://localhost:61616</value>
        </property>
</bean>

<bean id="dataQueue" class="org.apache.activemq.command.ActiveMQQueue">
    <constructor-arg value="dataQueue15"></constructor-arg>

</bean>

<bean id="container" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
        <property name="connectionFactory" ref="connectionFactory"/>
        <property name="messageListener" ref="MDPListener"/>
        <property name="destination" ref="dataQueue"/>
        <property name="sessionTransacted" value="true"/>



</bean>

私のonMessageには次のコードがあります:

public void onMessage(Message message,Session session) {        

        System.out.println("The session: "+session.toString());
        System.out.println("New Message arrived part2 .. Passing to Controller");

        Boolean g=false;

        if(g==true)
        {
            System.out.println("Data true..session committed!!");
        }
        else
        {

            System.out.println("in the queue");
            throw new RuntimeException("Saved");
        }
}

例外がスローされると、メッセージはキューに戻り、コントロールは同じメッセージをもう一度リッスンしてしばらくして停止する同じリスナーに戻ります。これにより、デッド キューが発生します。そのメッセージを保存できません。リスナーにキューをリッスンさせ、前のメッセージではなく次のメッセージをリッスンさせたい。助けてください!

4

1 に答える 1

1

JMS はそのようには機能しません。メッセージをコード内の別のキューに移動する必要があります。

または、ActiveMQ を使用すると、メッセージを DLQ により速く送信するように再配信ポリシーを構成できます (デフォルトは 6 回の再試行だと思います)。

于 2013-03-29T12:27:48.433 に答える