Есть следующий код (для получателя сообщений):
ConnectionFactory factory = new ConnectionFactory();
try (JMSContext context = factory.createContext("admin", "admin", JMSContext.AUTO_ACKNOWLEDGE))
{
factory.setProperty(ConnectionConfiguration.imqAddressList, "mq://127.0.0.1:7676,mq://127.0.0.1:7676");
int id = new Random().nextInt();
context.setClientID("" + id);
Topic topic = context.createTopic("Topic");
String selector= "name='value'";
String dur_id = "DurableC" + id;
JMSConsumer consumer = context.createDurableConsumer(topic,dur_id);
while (true) {
Message msg = consumer.receive();
System.out.println(msg.getBody(String.class));
}
} catch (Exception e) {
e.printStackTrace();
}
Есть следующий код для отправителя:
ConnectionFactory factory = new ConnectionFactory();
try (JMSContext context = factory.createContext("admin", "admin"))
{
factory.setProperty(ConnectionConfiguration.imqAddressList, "mq://127.0.0.1:7676,mq://127.0.0.1:7676");
Topic topic = context.createTopic("Topic");
TextMessage textMessage = context.createTextMessage("Message #" + msg);
textMessage.setStringProperty("name", "value");
context.createProducer().send(topic, textMessage);
Thread.sleep(1000);
}
catch (Exception e)
{
System.out.println(e.getMessage());
}
Проблема заключается в том, что если будет разрыв соединения, то никакие сообщения из Topic на консоль у меня не выводятся, хотя я создаю Durable Consumer. Объясните, что я делаю не так
В JavaDoc к методу createDurableConsumer пишется:
The JMS provider retains a record of this durable subscription and ensures that all messages from the topic's publishers are retained until they are delivered to, and acknowledged by, a consumer on this durable subscription or until they have expired.
A durable subscription will continue to accumulate messages until it is deleted using the unsubscribe method.
Т.е., под Durability подразумевается сохранение сообщений вне зависимости от того, подключен получатель к очереди или нет. Про восстановление разорванных соединений ничего не сказано.
Вы можете назначить слушателя ошибок:
context.setExceptionListener(new MyExceptionListener());
и реализовать в нём логику проверки наличия соединения и его восстановления в случае обрыва.
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Так как у СМЭВ есть образцовая реализация механизма их же нормализации XML в их методической рекомендации (можно глянуть тут пункт 124), то я решил...
Делаю редактор кода с подсветкой синтаксиса на Swing в NetBeans 82
Здравствуйте! При переводе миллисекунд в минуты, число превышает 60, должно быть меньше 60Что я делаю не так, подскажите? Спасибо