Я пытаюсь отправить сообщение с помощью 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 для разрешения заполнителейв файле.Но когда я отлаживаю код, я вижу, что имена фабрики соединений и очереди разрешаются правильно.
Я не получаю никаких ошибок в файлах журнала сервера.