Підтвердження отримання повідомлення
JMS підтримує три "основних" моделі підтвердження отримання повідомлення.
AUTO_ACKNOWLEDGE - в разі синхронного отримання повідомлень, підтвердження отримання буде вироблено автоматично, коли метод receive() поверне значення не викликавши жодної виняткової ситуації. У разі асинхронного отримання повідомлень, підтвердження отримання буде вироблено, коли метод onMessage() поверне значення.
DUPS_OK_ACKNOWLEDGE - робота з підтвердження отримання повідомлення перекладається на Session. Повідомлення будуть знову доставлені в разі виникнення помилки або "загибелі" системи.
CLIENT_ACKNOWLEDGE - клієнт повинен викликати метод acknowledge() інтерфейсу javax.jms.Message для того, щоб явно підтвердити отримання повідомлення. При виклику даного методу буде підтверджено отримання поточного і всіх попередніх отриманих повідомлень.
2 ХІД ВИКОНАННЯ РОБОТИ
Приклад наданий для роботи в IDE Eclipse.
Необхідно додати сервер до Eclipse. Для цього на вкладці Servers необхідно натиснути ПКМ та вибрати пункт New (рисунок 5).
Рисунок 5 – Пункт новий сервер
Виберіть "JBoss AS 6.x" і натисніть на кнопку "Далі"(рисунок 6). Виберіть JBoss 6.x Шлях з локальної файлової системи. Виберіть Конфігурація "за замовчуванням" і натисніть на кнопку "Готово" (рисунок 7).
Рисунок 6 – Вибір серверу
Рисунок 7 – Завершення конфігурування сервера
Тепер ми можемо спостерігати, що JBoss AS 6.x запущений і працює (рисунок 8).
Рисунок 8 – Працючий сервер
Щоб налаштувати HornetQ пункти призначення (Черги або теми) з JBoss AS 6, необхідно створити EJB Project в Eclipse IDE (рисунок 9).
Рисунок 9 – EJB Project
Вкажіть назву проекту "HornetQ Config App" і виберіть цільову середу виконання "JBoss 6.x Runtime".
Рисунок 10 – Зазначення назви та середи виконання проекту
Далі необхідно створити файл "hornetq-jms.xml" в директорії "ejbModule \ META INF", щоб додати нову чергу (рисунок 11).
Рисунок 11 – Нова структура проекту
hornetq-jms.xml - використовується для настройки JMS черг і тем для HornetQ JMS Provider (рисунок 12).
Рисунок 12 - hornetq-jms.xml
Далі натисніть правою кнопку миші на сервері і виберіть "Додавання і видалення" (рисунок 13).
Рисунок 13 – Розміщення черги на сервері
Тепер необхідно створити новий проект Java для розробки JMS Publisher і Consumer.
Створення JBoss JMS програми Publisher:
import javax.jms.*;
import javax.naming.*;
public class JBossJMSPublisher {
public static void main(String[] args) throws Exception{
Context context = new InitialContext();
ConnectionFactory connectionFactory = (ConnectionFactory)context.lookup("/ConnectionFactory");
Destination queue = (Destination)context.lookup("queue/JDQueue");
Connection connection = connectionFactory.createConnection();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
MessageProducer producer = session.createProducer(queue);
TextMessage sntMessage =session.createTextMessage("JD Sample JMS Queue Message");
producer.send(sntMessage);
System.out.println("Message Sent successfully.");
connection.close();
}
}
Створення програми JMS Consumer:
import javax.jms.*;
import javax.naming.*;
public class JBossJMSConsumer {
public static void main(String[] args) throws Exception{
Context context = new InitialContext();
ConnectionFactory connectionFactory = (ConnectionFactory)context.lookup("/ConnectionFactory");
Destination queue = (Destination)context.lookup("queue/JDQueue");
Connection connection = connectionFactory.createConnection();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
MessageConsumer consumer = session.createConsumer(queue);
connection.start();
TextMessage rcvMessage = (TextMessage) consumer.receive();
System.out.println("Received Msg = " + rcvMessage.getText());
connection.close();
}
}
Далі визначити JBoss як JNDI в jndi.properties в папці "SRC" jndi.properties.
java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
java.naming.provider.url=jnp://localhost:1099
Тепер додати необхідні jars у Project Build path. Використайте "Add Library", щоб додати бібліотеку 6.x JBoss (рисунок 14).
Рисунок 14 – Додавання необхідних jars
Остаточний проект виглядає як показано на рисунку 15.
Рисунок 15 – Остаточна структура проекту
Тепер перевірте додаток JMS. Запустіть JMS Producer для відправки повідомлень на JBoss AS 6.x HornetQ (рисунок 16).
Рисунок 16 – Відправка повідомлення
Запустіть JMS Consumer та спостерігайте повідомлення (рисунок 17).
Рисунок 17 – Отримане повідомлення
3. КОНТРОЛЬНІ ЗАПИТАННЯ
Що таке МОМ?
Які існують моделі обміну повідомленнями?
Які існують відмінності PTP від pub/sub?
Що таке JMS?
З яких компонентів складається JMS?
Які існують типи повідомлень?
Назвіть відомі Вам моделі підтвердження отримання повідомлення.
4. СПИСОК ДОДАТКОВИХ ДЖЕРЕЛ ІНФОРМАЦІЇ
http://docs.oracle.com/javaee/6/tutorial/doc/bncdr.html
http://docs.oracle.com/javaee/6/tutorial/doc/bncdx.html#bncec
http://www.javable.com/columns/serv_side/workshop/14/
http://docs.oracle.com/javaee/6/tutorial/doc/bnceh.html
http://www.journaldev.com/9906/jms1-1-with-eclipse-and-jboss6-example
http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/JMSProducer/JMSProducer.html
https://habrahabr.ru/post/162813/
