سؤال

لقد قمت بإعداد قائمة انتظار عن طريق تكوينها في 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

من فضلك قل لي ما أفعله خطأ.جزيل الشكر!

هل كانت مفيدة؟

المحلول

أولا ليس عليك ذلك صراحة إنشاء أي قوائم الانتظار في الوسيط على الرغم من أنه لا ضرر.

كما أن الوجهات المتاحة في الوسيط لا يتم تعيينها بطريقة سحرية تلقائيًا في سياق JNDI لتتمكن من استخدام نوع ما من اسم JNDI.

انت تستطيع فعل ذالك صراحة كما هو موضح هنا.إذا كنت تريد السكان السحريين التلقائيين لـ JNDI، فاستخدم اصطلاح تسمية JNDI الخاص بـ قوائم الانتظار الديناميكية/DUMMY كاسم JNDI الذي تبحث عنه (كما هو موضح في ملف إنشاء الوجهات بشكل ديناميكي)

نصائح أخرى

همم..حسنًا، عندما أرغب في الاستماع إلى قائمة الانتظار، عادةً ما أفعل شيئًا كهذا.(الواردات من 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.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top