ActiveMQ и Java: очередь, producer и подтверждение обработки
Apache ActiveMQ — брокер сообщений. Приложение-производитель отправляет сообщение брокеру, а потребитель получает его из очереди. В модели publish/subscribe используется topic: это другая схема доставки, её нельзя подменять обычной очередью.
Подготовка Java-клиента
Сначала выберите ActiveMQ Classic или Artemis и совместимый клиент. Для примера с Classic и JMS 1.1 используются пакеты javax.jms и org.apache.activemq.ActiveMQConnectionFactory. Зависимости клиента и пространство имён javax/jakarta должны соответствовать вашей версии.
import javax.jms.*;
import org.apache.activemq.ActiveMQConnectionFactory;
ConnectionFactory factory =
new ActiveMQConnectionFactory("tcp://localhost:61616");
Connection connection = factory.createConnection();
try {
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
try {
Queue queue = session.createQueue("orders.demo");
javax.jms.MessageProducer producer = session.createProducer(queue);
producer.setDeliveryMode(DeliveryMode.PERSISTENT);
producer.send(session.createTextMessage("demo-order-1"));
producer.close();
} finally {
session.close();
}
} finally {
connection.close();
}Это локальный учебный producer, а не конфигурация публичного брокера. Для удалённого подключения нужны соответствующие аутентификация, TLS и сетевые ограничения.
Почему нельзя обещать отсутствие потерь
Доставка зависит от persistence, хранилища брокера, подтверждений и поведения клиента при сбое. Возможна повторная доставка: обработчик должен учитывать дубликаты. AUTO_ACKNOWLEDGE относится к сессии потребителя и не превращает отправку в сквозную транзакцию с вашей базой.
Проверьте отправку и получение тестового ID, перезапуск брокера и повтор обработки. AMQP, MQTT и OpenWire — варианты протоколов; поддержку и параметры выбирайте по документации конкретного брокера, а не по общему названию ActiveMQ.