6

ドキュメントで説明されているように、activemq.xml (ActiveMQ バージョン 5.2.0) で構成することにより、キューをセットアップしました。

<destinations>
    <queue physicalName="FOO.BAR" />
    <queue physicalName="DUMMY" />
</destinations>

次のコードを使用して、(同じホスト上の) Java からアクセスしようとしています。

Hashtable properties = new Hashtable();
properties.put(Context.INITIAL_CONTEXT_FACTORY, 
    "org.apache.activemq.jndi.ActiveMQInitialContextFactory");
properties.put(Context.PROVIDER_URL, "tcp://localhost:61616");

context = new InitialContext(properties);

factory = (ConnectionFactory) context.lookup("ConnectionFactory");
connection = factory.createConnection();
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
queueName = "DUMMY"; // which can be either FOO.BAR or DUMMY
dest = (Destination) context.lookup(queueName);

キューは jconsole (Tree / org.apache.activemq / Queue) に表示されますが、次のエラーが表示されます。

javax.naming.NameNotFoundException: DUMMY

私が間違っていることを教えてください。大変感謝します!

4

2 に答える 2

8

まず、ブローカーにキューを明示的に作成する必要はありませんが、害はありません。

また、ブローカーで利用可能な宛先は、ある種の JNDI 名を使用して自動的に JNDI コンテキストにマッピングされません。

ここで説明されているように、これを明示的に行うことができます。JNDI の自動作成が必要な場合は、検索する JNDI 名としてdynamicQueues/DUMMYの JNDI 命名規則を使用します (宛先の動的作成で説明されているように) 。

于 2009-01-12T20:12:24.383 に答える
0

うーん..キューを聞きたいときは、通常、次のようにします。(javax.jms からのインポート)

待ち行列。

    // Connect to ActiveMQ
    ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory(messageBrokerURL);
    connection = factory.createConnection();
    session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

    // List to Dummy Queue
    queue = session.createQueue("DUMMY");
    messageConsumer = session.createConsumer(queue);
    messageConsumer.setMessageListener(queueHandler);

    // Start the connection
    connection.start();

そして、ハンドラーが MessageListener を実装していることを確認してください。

于 2009-01-12T21:40:38.400 に答える