В мире систем обмена сообщениями служба сообщений Java (JMS) играет решающую роль в обеспечении взаимодействия между приложениями. JMS предоставляет гибкий и надежный способ асинхронной отправки и получения сообщений. Одной из важных концепций JMS является различие между постоянными и временными подписчиками. В этой статье мы рассмотрим различия между этими двумя типами подписчиков и приведем примеры кода, иллюстрирующие их использование.
Постоянные подписчики.
Постоянные подписчики предназначены для постоянного получения сообщений, даже если они временно отключены от системы обмена сообщениями. Обычно они используются в сценариях, где надежность сообщений имеет решающее значение и сообщения нельзя пропускать. Постоянные подписчики создают постоянную подписку, что означает, что система обмена сообщениями хранит для них сообщения до тех пор, пока они не подключатся повторно и не получат их.
Пример кода для создания постоянного подписчика:
import javax.jms.*;
public class DurableSubscriberExample {
public static void main(String[] args) {
try {
// Create a JMS connection
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");
Connection connection = connectionFactory.createConnection();
// Set the client ID for the connection
connection.setClientID("durableSubscriber");
// Create a session
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
// Create a topic
Topic topic = session.createTopic("myTopic");
// Create a durable subscriber
MessageConsumer subscriber = session.createDurableSubscriber(topic, "mySubscription");
// Start the connection
connection.start();
// Receive messages
Message message = subscriber.receive();
while (message != null) {
System.out.println("Received message: " + ((TextMessage) message).getText());
message = subscriber.receive();
}
// Close the connection
connection.close();
} catch (JMSException e) {
e.printStackTrace();
}
}
}
Непостоянные подписчики.
С другой стороны, непостоянные подписчики получают сообщения только тогда, когда они активно подключены к системе обмена сообщениями. Если непостоянный подписчик отключится или выйдет из сети, он не получит никаких сообщений, отправленных в течение этого времени. Непостоянные подписчики обычно используются в сценариях, где сохранение сообщений не является обязательным и допустимо пропускать сообщения при отключении.
Пример кода для создания временного подписчика:
import javax.jms.*;
public class NonDurableSubscriberExample {
public static void main(String[] args) {
try {
// Create a JMS connection
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");
Connection connection = connectionFactory.createConnection();
// Create a session
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
// Create a topic
Topic topic = session.createTopic("myTopic");
// Create a non-durable subscriber
MessageConsumer subscriber = session.createConsumer(topic);
// Start the connection
connection.start();
// Receive messages
Message message = subscriber.receive();
while (message != null) {
System.out.println("Received message: " + ((TextMessage) message).getText());
message = subscriber.receive();
}
// Close the connection
connection.close();
} catch (JMSException e) {
e.printStackTrace();
}
}
}
При работе с JMS важно понимать разницу между постоянными и временными подписчиками. Надежные подписчики обеспечивают сохранение сообщений даже при отключении, гарантируя надежность сообщений. С другой стороны, непостоянные подписчики подходят, когда сохранение сообщений не является требованием и допустимо пропускать сообщения при отключении. Используя соответствующий тип подписчика в зависимости от потребностей вашего приложения, вы можете создать надежную и эффективную систему обмена сообщениями с помощью JMS.