JMS или Java Messaging Service — это API для обмена сообщениями (обмена информацией между двумя отдельными и независимыми сетевыми объектами) на основе Java EE . Он устанавливает ряд интерфейсов для отправки и получения сообщений. JMS поддерживает две модели обмена сообщениями: PTP или «точка-точка» и «публикация-подписка». Первая модель (PTP) опирается на концепцию очередей сообщений, где ключевыми характеристиками являются один потребитель на сообщение и отсутствие временной зависимости между отправителем и получателем. Модель публикации-подписки — наоборот: несколько потребителей на сообщение и временная зависимость между отправителем и получателем.
Основными преимуществами использования JMS являются:
- Асинхронный обмен сообщениями (в этом случае все компоненты не должны быть включены, чтобы приложение функционировало в целом).
- Хранение (сообщения сохраняются от имени получателя, пока он не работает, а затем отправляют их, как только он работает).
Итак, как обычно, давайте попробуем эту технологию в Jelastic Cloud, используя сервер GlassFish!
Создать среду
1. Войдите в свою учетную запись Jelastic и нажмите Создать среду .
2. Выберите GlassFish в качестве сервера приложений и укажите для него ограничения ресурсов. Затем введите имя своей среды и нажмите « Создать» .
Через несколько минут ваша среда появится на Jelastic Dashboard.
Создать приложение JMS
Мы используем приложение JMS, написанное Аруном Гуптой , которое состоит из Отправителя, Получателя и простого тестового сервлета для проверки результатов выполнения программы.
1. Во-первых, создайте отправителя. Это EJB без сохранения состояния, который содержит только один метод для отправки сообщений:
package org.sample.sendmessage; import javax.annotation.Resource; import javax.ejb.Stateless; import javax.jms.*; @Stateless public class MessageSender { @Resource(mappedName = "jms/JMSConnectionFactory") private ConnectionFactory connectionFactory; @Resource(mappedName = "jms/myQueue") Queue queue; public void sendMessage(String message) { MessageProducer messageProducer; TextMessage textMessage; try { Connection connection = connectionFactory.createConnection(); Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); messageProducer = session.createProducer(queue); textMessage = session.createTextMessage(); //textMessage.setJMSDeliveryMode(DeliveryMode.NON_PERSISTENT); textMessage.setText(message); messageProducer.send(textMessage); messageProducer.close(); session.close(); connection.close(); } catch (JMSException e) { e.printStackTrace(); } } }
2. Теперь мы создадим Receiver, который также является EJB с единственным методом для синхронного получения сообщений:
package org.sample.sendmessage; import javax.annotation.Resource; import javax.ejb.Stateless; import javax.jms.*; import java.util.Enumeration; @Stateless public class MessageReceiverSync { @Resource(mappedName = "jms/JMSConnectionFactory") private ConnectionFactory connectionFactory; @Resource(mappedName = "jms/myQueue") Queue myQueue; private String message; public String receiveMessage() { try { Connection connection = connectionFactory.createConnection(); Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); QueueBrowser queueBrowser = session.createBrowser(myQueue); Enumeration enumeration = queueBrowser.getEnumeration(); while (enumeration.hasMoreElements()) { TextMessage o = (TextMessage) enumeration.nextElement(); return "Receive " + o.getText(); } session.close(); connection.close(); } catch (JMSException e) { e.printStackTrace(); } return ""; } }
3. Наконец, давайте создадим тестовый сервлет, который соединяет все части нашего кода и помогает нам проверить результаты выполнения нашей программы:
package org.sample.sendmessage; import java.io.IOException; import java.io.PrintWriter; import javax.ejb.EJB; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet(urlPatterns = {"/TestServlet"}) public class TestServlet extends HttpServlet { @EJB MessageSender sender; @EJB MessageReceiverSync receiver; protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); try (PrintWriter out = response.getWriter()) { out.println(""); out.println(""); out.println("JMS2 Send Message"); out.println(""); out.println(""); out.println("JMS2 Send/Receive Message using JMS2 " + request.getContextPath() + ""); String m = "Hello there"; sender.sendMessage(m); out.format("Message sent: %1$s.", m); out.println("Receiving message..."); String message = receiver.receiveMessage(); out.println("Message rx: " + message); out.println(""); out.println(""); } } @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); } @Override public String getServletInfo() { return "Short description"; } }
4. Соберите приложение в WAR-пакет.
Настроить GlassFish
1. Откройте GlassFish в браузере и войдите в консоль администратора GlassFish, используя учетные данные, которые Jelastic отправил вам при создании среды.
2. Java EE требует, чтобы JMS ConnectionFactory был настроен и доступен для приложения под именем JNDI. Во-первых, перейдите к ресурсам JMS и создайте новую фабрику с именем jms / JMSConnectionFactory с типом javax.jms.QueueConnectionFactory .
3. Выберите gfcluster в качестве цели и сохраните изменения.
4. Перейдите к ресурсам назначения и создайте очередь jms / myQueue с именем Queue с типом javax.jms.Queue . Цель также gfcluster.
Развертывание приложения JMS
1. Перейдите на вкладку « Приложения », загрузите пакет приложения и разверните его в контексте отправки сообщения кластера GlassFish.
2. Запустите приложение JMS в веб-браузере, чтобы проверить результаты.
Как вы можете видеть в приложении, даже сложные приложения работают в Jelastic Cloud как обаяние. Не просто поверьте нам на слово. Попробуйте Jelastic и получите немедленный доступ к бесплатной 2-недельной бесплатной пробной версии !