Я пытаюсь отправить простое сообщение на RabbitMQ (версия: 3.7.7) с AMQP 1.0 с использованием клиента QPID JMS. Я использую следующие версии:
<dependency>
<groupId>org.apache.qpid</groupId>
<artifactId>qpid-jms-client</artifactId>
<version>0.40.0</version>
</dependency>
<dependency>
<groupId>javax.jms</groupId>
<artifactId>javax.jms-api</artifactId>
<version>2.0</version>
</dependency>
Я включил плагин rabbitmq_amqp1_0
на RabbitMQ и создал очередь с именем «очередь» в брокере с помощью интерфейса управления. Затем я создал модульный тест со следующим содержанием:
public class JMSIssueTest {
private static final String AMQP_URI = "amqp://localhost:5672";
private static final String QUEUE_NAME = "queue";
@Test
public void testSend() throws Exception {
JmsConnectionFactory factory = new JmsConnectionFactory(AMQP_URI);
try(Connection connection = factory.createConnection()){
connection.setExceptionListener(new MyExceptionListener());
connection.start();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
Queue queue = session.createQueue(QUEUE_NAME);
MessageProducer producer = session.createProducer(queue); // the code stops here
TextMessage message = session.createTextMessage("test");
producer.send(message);
System.out.println("send");
}
}
private static class MyExceptionListener implements ExceptionListener {
@Override
public void onException(JMSException exception) {
System.out.println("Connection ExceptionListener fired, exiting.");
exception.printStackTrace(System.out);
System.exit(1);
}
}
}
Если запустить этот тест, я не получаю сообщение об ошибке, но в консоли я вижу следующий вывод:
DEBUG org.apache.qpid.jms.provider.amqp.builders.AmqpProducerBuilder - Creating AmqpFixedProducer for: queue
На RabbitMQ я вижу соединение с типом протокола AMQP 1.0
.
Я неправильно создаю продюсера?