Wildfly14 + Невозможно найти очередь invm - PullRequest
0 голосов
/ 08 апреля 2019

Невозможно найти очередь invm через ConnectionFactory

Hashtable<String, Object> properties = new Hashtable<>();
properties.put("connectionFactory.ConnectionFactory", "(tcp://localhost:8080)?httpUpgradeEnabled=true&retryInterval=3000&reconnectAttempts=-1&initialConnectAttempts=10&maxRetryInterval=3000&clientFailureCheckPeriod=1000");
properties.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.activemq.artemis.jndi.ActiveMQInitialContextFactory");
InitialContext jndiContext = new InitialContext(properties);
ConnectoryFactory connFactory = (ConnectionFactory) jndiContext.lookup(connectionFactory);
Connection connection = connFactory.createConnection(userName, password);
session = connection.createSession(true, javax.jms.Session.AUTO_ACKNOWLEDGE);

Hashtable<String, Object> properties = new Hashtable<>();
properties.put(Context.INITIAL_CONTEXT_FACTORY, factoryInitial);
InitialContext ctx = new InitialContext(properties);
destination = (Destination) ctx.lookup("dynamicQueues/TestQueue"); //I can't put queue name in jndi.properties

MessageProducer producer = session.createProducer(destination);
producer.send(message, Message.DEFAULT_DELIVERY_MODE, Message.DEFAULT_PRIORITY, msgTTL);
if (session.getTransacted() && session.getAcknowledgeMode() == Session.SESSION_TRANSACTED) {
   session.commit();
}

Когда я выполняю приведенный выше код, он выдает ошибку о том, что очередь "TestQueue" не существует. Я пробовал с очередью поиска с помощью dynamicQueues / TestQueue и jms / TestQueue, но в обоих случаях я получил ту же ошибку

Подскажите, пожалуйста, что не так с этим кодом.

Ниже приведена конфигурация Wildfly ActiveMQ Artemis

<server name="default" persistence-enabled="true">
    <cluster password="${jboss.messaging.cluster.password:CHANGE ME!!}"/>
    <bindings-directory path="/opt/shared/messaging/live/bindings"/>
    <journal-directory path="/opt/shared/messaging/live/journal"/>
    <large-messages-directory path="/opt/shared/messaging/live/largemessages"/>
    <paging-directory path="/opt/shared/messaging/live/paging"/>
    <security-setting name="#">
        <role name="guest" send="true" consume="true" create-durable-queue="true" delete-durable-queue="true" create-non-durable-queue="true" delete-non-durable-queue="true"/>
    </security-setting>
    <address-setting name="#" dead-letter-address="jms.queue.DLQ" expiry-address="jms.queue.ExpiryQueue" redelivery-delay="60000" max-delivery-attempts="5" max-size-bytes="50485760" page-size-bytes="10485760" address-full-policy="PAGE" redistribution-delay="1000"/>
    <http-connector name="http-connector" socket-binding="http" endpoint="http-acceptor"/>
    <http-connector name="http-connector-throughput" socket-binding="http" endpoint="http-acceptor-throughput">
        <param name="batch-delay" value="50"/>
    </http-connector>
    <in-vm-connector name="in-vm" server-id="0">
        <param name="buffer-pooling" value="false"/>
    </in-vm-connector>
    <http-acceptor name="http-acceptor" http-listener="default"/>
    <http-acceptor name="http-acceptor-throughput" http-listener="default">
        <param name="batch-delay" value="50"/>
        <param name="direct-deliver" value="false"/>
    </http-acceptor>
    <in-vm-acceptor name="in-vm" server-id="0">
        <param name="buffer-pooling" value="false"/>
    </in-vm-acceptor>
    <broadcast-group name="bg-group1" jgroups-cluster="activemq-cluster" connectors="http-connector"/>
    <discovery-group name="dg-group1" jgroups-cluster="activemq-cluster"/>
    <cluster-connection name="my-cluster" address="jms" connector-name="http-connector" discovery-group="dg-group1"/>
    <jms-queue name="ExpiryQueue" entries="java:/jms/queue/ExpiryQueue"/>
    <jms-queue name="DLQ" entries="java:/jms/queue/DLQ"/>
    <jms-queue name="TestQueue" entries="java:/jms/TestQueue java:jboss/exported/jms/TestQueue"/>
    <connection-factory name="InVmConnectionFactory" entries="java:/ConnectionFactory" connectors="in-vm"/>
    <connection-factory name="RemoteConnectionFactory" entries="java:jboss/exported/jms/RemoteConnectionFactory" connectors="http-connector" ha="true" block-on-acknowledge="true" reconnect-attempts="-1"/>
    <pooled-connection-factory name="activemq-ra" entries="java:/JmsXA java:jboss/DefaultJMSConnectionFactory" connectors="in-vm" transaction="xa"/>
</server>

Ответы [ 2 ]

0 голосов
/ 08 апреля 2019

Исходная фабрика контекста, которую вы используете (т.е. org.apache.activemq.artemis.jndi.ActiveMQInitialContextFactory), является реализацией JNDI только на стороне клиента для использования с автономным ActiveMQ Artemis.Поскольку вы используете Wildfly, вы должны использовать их реализацию JNDI (то есть org.wildfly.naming.client.WildFlyInitialContextFactory).Затем вы можете искать и фабрику соединений, и назначение с сервера Wildfly, и вам не нужно будет указывать URL-адрес фабрики соединений в вашем коде.

Также не существует такой вещи, как «очередь invm».

0 голосов
/ 08 апреля 2019

Я просто хочу поделиться с вами некоторыми ссылками для дальнейшего чтения.

Быстрый старт - хорошая отправная точка, если вы начинаете разработку с использованием wildfly.

Вот пример внешнего клиента: https://github.com/wildfly/quickstart/tree/14.x/helloworld-jms

Здесь тот, где все работает внутри контейнера с wildfly: https://github.com/wildfly/quickstart/tree/14.x/helloworld-mdb

Здесь у вас есть общая документация по обмену сообщениями в wildfly 14: https://docs.wildfly.org/14/Admin_Guide.html#Messaging

...