Не удается поместить сообщение в ActiveMQ с помощью поиска JNDI - PullRequest
0 голосов
/ 04 февраля 2019

Я пытаюсь отправить сообщение с помощью ActiveMQ из контейнера JBoss EAP 7 Docker в контейнер ActiveMQ Docker.Я добавил имена очередей в автономный файл и разрешаю имя очереди с помощью поиска JNDI.

@Resource(name = "java:/jms/queueName")

Фабрика соединений также разрешается с помощью JNDI

@Resource(lookup = "java:/jms/activeMQConnectionFactory")

.класс, который разрешает эти объекты, помечается

@Named("MyClassName")
@Stateless

и внедряется в другой класс.

Моя установка очереди

Connection connection = null;
    Session session = null;
    MessageProducer producer = null;

    try {
        connection = cf.createConnection();

        session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        producer = session.createProducer(senderQueueName);
        connection.start();

        TextMessage message = session.createTextMessage();
        message.setText(payload);
        message.setJMSCorrelationID(correlationId.trim());
        message.setJMSExpiration(Long.parseLong(messageExpiryMillis));
        producer.send(message);

    } catch (Exception ex) {
        throw ex;
    }

Я все еще не могу отправить сообщениеочередь, которая расстраивает, потому что, если я жестко закодирую имя очереди и фабрику соединений, приложение будет работать успешно.

Любая помощь по этому вопросу будет принята с благодарностью, и я могу предоставить больше информации, если это необходимо.

Редактировать

Настройка очереди в автономном файле выглядит следующим образом:

<resource-adapter id="activemq-rar">
<archive>
    activemq-rar-5.15.6.rar
</archive>
<transaction-support>XATransaction</transaction-support>
<config-property name="ServerUrl">
    tcp://{{ activemq_host }}:{{ activemq_port }}{{ activemq_tcp_connection_options }}
</config-property>
<config-property name="UserName">
    {{ activemq_user }}
</config-property>
<config-property name="Password">
    {{ activemq_password }}
</config-property>
<config-property name="UseInboundSession">
    true
</config-property>
<connection-definitions>
    <connection-definition class-name="org.apache.activemq.ra.ActiveMQManagedConnectionFactory"
                            jndi-name="java:/jms/activeMQConnectionFactory" enabled="true"
                            use-java-context="true" pool-name="activeMQManagedConnectionFactory">
        <config-property name="UseInboundSession">
            false
        </config-property>
        <config-property name="MaximumRedeliveries">
            0
        </config-property>
        <xa-pool>
            <min-pool-size>1</min-pool-size>
            <max-pool-size>20</max-pool-size>
            <prefill>true</prefill>
            <is-same-rm-override>false</is-same-rm-override>
        </xa-pool>
        <recovery>
            <recover-credential>
                <user-name>recoveryName</user-name>
                <password>recoveryPassword</password>
            </recover-credential>
        </recovery>
    </connection-definition>
</connection-definitions>
<admin-objects>
    <admin-object class-name="org.apache.activemq.command.ActiveMQQueue" jndi-name="java:/jms/q.requestQueueName" enabled="true" use-java-context="true" pool-name="RequestPool">
        <config-property name="PhysicalName">
            q.my.request.queue
        </config-property>
    </admin-object>
    <admin-object class-name="org.apache.activemq.command.ActiveMQQueue" jndi-name="java:/jms/q.responseQueueName" enabled="true" use-java-context="true" pool-name="ResponsePool">
        <config-property name="PhysicalName">
            q.my.response.queue
        </config-property>
    </admin-object>
</admin-objects>

Я использую Ansible для разрешения заполнителейв файле.Но когда я отлаживаю код, я вижу, что имена фабрики соединений и очереди разрешаются правильно.

Я не получаю никаких ошибок в файлах журнала сервера.

...