0

次のようにメッセージを生成するための簡単なActiveMQクライアントプログラムを作成しました。

public static void main(String[] args) throws Throwable
{
    final ActiveMQConnectionFactory conFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");
    final QueueConnection connection = conFactory.createQueueConnection();
    final Session session = connection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
    final Destination destination = new ActiveMQQueue("MJ_SAF");
    final MessageProducer producer = session.createProducer(destination);

    Message message = session.createTextMessage("test");
    message.setLongProperty(ScheduledMessage.AMQ_SCHEDULED_DELAY, 20);
    message.setLongProperty(ScheduledMessage.AMQ_SCHEDULED_PERIOD, 1);
    message.setIntProperty(ScheduledMessage.AMQ_SCHEDULED_REPEAT, 1);
    producer.send(message);
}

このプログラムを実行すると、メッセージがスケジュールされた部分に保存され、ActiveMQ20 秒後にMJ_SAFキューに送信されると予想されますが、Web コンソールに接続すると、次の結果が表示されました。

ここに画像の説明を入力

に 2 つのメッセージを保存しましMJ_SAFたが、正しくありませんが、通常 (スケジューリングなしで) メッセージを送信すると、Web コンソールにメッセージが表示されます。

public static void main(String[] args) throws Throwable
{
    final ActiveMQConnectionFactory conFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");
    final QueueConnection connection = conFactory.createQueueConnection();
    final Session session = connection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
    final Destination destination = new ActiveMQQueue("MJ_SAF");
    final MessageProducer producer = session.createProducer(destination);

    Message message = session.createTextMessage("test");
    producer.send(message);
}

上記のコードにより、すべてがうまくいきます:

ここに画像の説明を入力

この振る舞いがわかりません。誰かがこれの理由を知っていますか?

4

1 に答える 1

4

プロパティScheduledMessage.AMQ_SCHEDULED_REPEATが 1 に設定されているため、1 回繰り返されて合計 2 つのメッセージが表示されます。

プロパティの説明については、こちらを参照してください。私が理解しているように、現在のセットアップは 20 ミリ秒待機し、1 つのメッセージを発行し、1 ミリ秒待機し、2 番目のメッセージを発行してから終了します。

于 2013-02-18T11:26:58.090 に答える