Я использую RMQ и его JMS-клиент для публикации сообщений в RMQ (это требование, которое у меня есть, я не могу использовать их Java-клиент вместо JMS-клиента).
Итак, в основном я делаю это:
RMQConnectionFactory factory = new RMQConnectionFactory() ;
factory.setUsername(props.getProperty("rmq.username"));
factory.setPassword(props.getProperty("rmq.password"));
factory.setHost(props.getProperty("rmq.host"));
factory.setVirtualHost(props.getProperty("rmq.virtualHost"));
factory.setPort(Integer.parseInt(props.getProperty("rmq.port")));
Connection connection = factory.createConnection();
connection.start();
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
String queueName = managerProps.getProperty("rmq.queue.name");
Queue queue = session.createQueue(queueName);
producer = session.createProducer(queue);
TextMessage msg = session.createTextMessage(text);
msg.setText(text);
producer.send(msg);
У меня есть политика, настроенная на переполнение RMQ: reject-publish, поэтому, если она превышает лимит, RMQ должен отправлять nack, когдаочередь переполнена, но я, кажется, не понимаю.
Вопрос - как определить, было ли сообщение отклонено?Я предполагаю, что продюсер.send (msg) является синхронным и выдает исключение, если сообщение не публикуется, но я не получаю никаких исключений, просто похоже, что все было опубликовано.
В спецификации JMS есть функция send (msg, CompletionListener) со слушателем с двумя методами onCompletion и onException, но не похоже, что JMS-клиент RMQ реализовал этот метод.
Есть ли другой способ убедиться, что сообщение прошло через него?