MQ - что это и как она работает
MQ (Message Queuing) – это протокол и архитектура, который используется для обмена сообщениями между компьютерами. Он позволяет приложениям обмениваться сообщениями асинхронно, используя очереди сообщений.
При использовании MQ сообщения отправляются в очередь, которая может быть прочитана получателем. Это позволяет процессу отправки сообщения независимо продолжать работу, без необходимости ждать ответа от получателя. Другими словами, это позволяет разделить процессы отправки и получения сообщений, что обеспечивает более эффективную и масштабируемую архитектуру.
Код, использующий MQ, может выглядеть так:
// Отправитель
import javax.jms.*;
import org.apache.activemq.ActiveMQConnectionFactory;
public class Sender {
public static void main(String[] args) throws JMSException {
// Создаем подключение к Apache ActiveMQ
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");
Connection connection = connectionFactory.createConnection();
// Создаем сессию
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
// Создаем очередь сообщений
Queue queue = session.createQueue("test");
// Создаем отправителя сообщений
MessageProducer messageProducer = session.createProducer(queue);
// Создаем сообщение
TextMessage message = session.createTextMessage("Hello, World!");
// Отправляем сообщение
messageProducer.send(message);
// Закрываем соединение
connection.close();
}
}
// Получатель
import javax.jms.*;
import org.apache.activemq.ActiveMQConnectionFactory;
public class Receiver {
public static void main(String[] args) throws JMSException {
// Создаем подключение к Apache ActiveMQ
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");
Connection connection = connectionFactory.createConnection();
// Создаем сессию
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
// Создаем очередь сообщений
Queue queue = session.createQueue("test");
// Создаем получателя сообщений
MessageConsumer messageConsumer = session.createConsumer(queue);
// Получаем сообщение
Message message = messageConsumer.receive();
// Выводим сообщение на экран
if (message instanceof TextMessage) {
TextMessage textMessage = (TextMessage) message;
System.out.println("Received message: " + textMessage.getText());
}
// Закрываем соединение
connection.close();
}
}
В этом примере Sender отправляет сообщение в очередь "test", а Receiver получает это сообщение из этой очереди и выводит его на экран. Это может быть полезно в различных сценариях, таких как микросервисы, распределенные системы и т.д.