3

BlockingQueueを使用する既存のコードは、メッセージを処理するためのBlockingQueueのリスト(プライベートリスト>キューなど)を作成します。ただし、永続性の問題のため、activemqに移行する予定です。activemqキューのリストを取得できる場合(構成ファイルからではなくJavaプログラムで)、誰かが私を助けてくれますか?セッションでcreateQueueを使用してキューの単一インスタンスを作成できることは知っていますが、BlockingQueueに対して行われるようなキューのリストが必要です。

どんな助けでも大歓迎です。

4

2 に答える 2

5

接続からDestinationSourceを使用して、使用可能なキューのリストを取得できます。

ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");
ActiveMQConnection connection = (ActiveMQConnection)connectionFactory.createConnection();
DestinationSource ds = connection.getDestinationSource();
Set<ActiveMQQueue> queues = ds.getQueues();

編集:キューを作成するには、ActiveMQ Hello worldサンプルリンクを参照してください。コードは、jvmに埋め込まれたactiveMQブローカーへの接続を作成しています。

// Create a ConnectionFactory
ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("vm://localhost");

// Create a Connection
Connection connection = connectionFactory.createConnection();
connection.start();

// Create a Session
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

// Create the destination (Topic or Queue)
Destination destination = session.createQueue("TEST.FOO");

上記のコードでは明らかではないかもしれないことは、次の行です。

ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("vm://localhost");

ブローカーへの接続をセットアップするだけでなく、ブローカーがまだない場合は接続内にブローカーを埋め込みます。このページの下部で説明されています

その機能は使用をオフにすることができます(ブローカーが必要ですが、他の方法で設定したい場合):

ActiveMQConnectionFactory cf = new ActiveMQConnectionFactory("vm://localhost?create=false");

私はActiveMQが本当に好きですが、永続性以上のものを提供するため、単純なことを行うと、物事が少し複雑に見えるかもしれません。しかし、それがあなたを怖がらせないことを願っています。

于 2012-12-24T12:56:50.593 に答える
0

キューのリストを作成するには、そのリストを作成してから、セッションオブジェクトから各キューを個別に作成する必要があります。

Queue q = session.createQueue("someQueueName")

ただし、キューはActiveMQプロセス/サーバー内の永続的な「もの」であるため、これはその意味で実際にはキューを「作成」しません。これにより、識別子/名前が指定されたActiveMQキューへの参照のみが作成されます。

なぜすぐに10個のキューが必要なのかわかりません。通常、イベントタイプまたはユースケース(または同様のもの)ごとに1つのキューがあり、並行コンシューマーを使用して並列処理します。

ただし、もちろん、単純なforループを使用して、一度に1つのキューを作成し、それらを配列リストにアタッチすることで、いつでも同様のことを行うことができます。Eventオブジェクトのみを含むタイプセーフキューを取得できないことに注意してください。

ObjectMessageただし、イベントとともにを送信することはできます。1つ作成するだけです。

Event event = createEvent(..); // Given "Event" is serializable (need to be able to persist it).
Message m = session.createObjectMessage(event);
// Send message as usual in ActiveMQ.

BlockingQueuesから永続的なActiveMQキューに変換するときに、コード内の1つまたはいくつかのことを再考する必要があるかもしれません。

于 2012-12-28T10:48:17.807 に答える