2016-08-26 13 views
0

SpringアプリケーションでActiveMQを使用する際に問題があります。存在しないActiveMQ生成キュー

私は別のマシンにいくつかの環境を持っています。各マシンには、1つのActiveMQインスタンスがインストールされていました。今、私は、1つのサーバーに1つのActiveMQインスタンスをインストールすることができ、メッセージを送信するためにそのActiveMQを使用できるアプリケーションはほとんどないことに気付きました。だから、私はキューの名前を異なる環境("queue.search.sandbox""queue.search.production"、など)にするために変更する必要があります。

この変更後、ActiveMQは新しいキューを生成しますが、古いキューも生成しますが、そのような構成はありません。

私は、Javaではなく、Javaの設定でJava Springアプリケーションを使用しています。

まず、私は春のBeanとしてqueueTemplateを作成します。私は適切にキューを作成した結果として、自分のアプリケーションを構築した後

@Bean 
public DefaultMessageListenerContainer jmsAuditQueueListenerContainer() { 
    log.debug("ActiveMQConfiguration jmsAuditQueueListenerContainer"); 
    DefaultMessageListenerContainer dmlc = new DefaultMessageListenerContainer(); 
    dmlc.setConnectionFactory(connectionFactory); 
    String queueName = "queue.audit.".concat(env.getProperty("activeMqBroker.queueName.suffix")); 
    ActiveMQQueue activeMQ = new ActiveMQQueue(queueName); 
    dmlc.setDestination(activeMQ); 
    dmlc.setRecoveryInterval(30000); 

    dmlc.setSessionTransacted(true); 
    // To perform actual message processing 
    dmlc.setMessageListener(auditQueueListenerService); 

    dmlc.setConcurrentConsumers(10); 
    // ... more parameters that you might want to inject ... 
    return dmlc; 
} 

@Bean 
public JmsTemplate jmsAuditQueueTemplate() { 
    log.debug("ActiveMQConfiguration jmsAuditQueueTemplate"); 
    JmsTemplate jmsTemplate = new JmsTemplate(); 
    String queueName = "queue.audit.".concat(env.getProperty("activeMqBroker.queueName.suffix")); 
    jmsTemplate.setDefaultDestination(new ActiveMQQueue(queueName)); 
    jmsTemplate.setConnectionFactory(connectionFactory()); 
    return jmsTemplate; 
} 

第二に、私は、ActiveMQのListener構成を作成します接尾辞("queue.audit.sandbox")ですが、ActiveMQが生成して古いバージョン("queue.audit")を送信したあと、

誰かがActiveMQでこれをやっていることを知っていますか?前もって感謝します。

+1

はキュー 'queue.audit'に加入されているソフトウェアの他の作品はありますか? – Orin

+0

いいえ、ありません。すべてがコアアプリケーション内で発生します。 –

+0

"data"ディレクトリを削除し、webconsoleまたはjmxを使用して古いキューとの接続があるかどうかを確認します。 –

答えて

0

キューのインデックスにまだエントリが残っている可能性があります。したがって、ActiveMQが再起動するとキューが表示されます。送信先を確実に知りたい場合は、起動先を使用し、認証エントリ内の接続するユーザアカウントに対する「管理者」のアクセス権を拒否して自動作成を無効にする

+0

これは私の問題の解決策のように思えますが、私はActiveMQの設定を変更しておらず、キューの作成を停止しました。 ActiveMQの再起動後に未使用のキューを再構成するための設定に、いくつかのパラメータがあります。 –

+0

このインデックスは、activemqの設定ではなく、kahadbの一部として格納されています。 db - *。logファイルが回転すると、キューが表示されないと思います。また、kahadbフォルダーのバックアップを作成し、.dataファイル(インデックス)を削除し、ActiveMQでインデックスを再作成することもできます。 –

0

ActiveMQは、 。 ここでは、不必要なキューを使用せずに動作を期待しています。それでも誠実であるためには、この問題を解決したものを、私を発見していなかった

...

関連する問題