1

activemqを使用してメッセージを送信しています。送信されるメッセージの数と、アプリケーションが送信している他の作業の量が原因です。非同期送信を有効にしました。

アプリケーションが終了したら、残りのメッセージが実際に配信されることを確認したいと思います。これは、接続で送信される最後のメッセージの1つを見逃すことがあるためです。

グーグルで調べてみると、いくつかのメッセージを見逃す可能性があるという警告だけが見つかりました。これは許容範囲ですが、最後のメッセージのいくつかを約40%の確率で見逃しています。この状況を改善したいと思います。

Q:activemqプロデューサー/センダーがすべての非同期メッセージを送信したかどうかを確認する方法はありますか?

    ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory( brokerUrl );
    connectionFactory.setUseAsyncSend( true );
    RedeliveryPolicy policy = connectionFactory.getRedeliveryPolicy();
    policy.setInitialRedeliveryDelay( 500 );
    policy.setBackOffMultiplier((short)2);
    policy.setUseExponentialBackOff(true);
    policy.setMaximumRedeliveries(10);
4

1 に答える 1

1

最後のメッセージに対して非同期送信モードをオフに戻すことができます。これにより、メッセージが受信されたことをブローカーが確認するまで、クライアントは送信を待機することになります。Connection オブジェクトを ActiveMQConnection にキャストする必要があります。その後、setUseAsyncSend(false) を呼び出すことができます。

于 2013-01-09T12:16:33.617 に答える