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-недельной бесплатной пробной версии !






