JMS съобщения в Java приложение

JMS (Java Message Service) е стандарт за съобщения между приложения. Java приложения, базирани на Java SE (самостоятелна) или Java EE (WEB) технология, могат да създават, изпращат и получават JMS съобщения. Софтуерът, използван за предаване на съобщения между приложения, използващи стандарта JMS, генерира опашки за съобщения.

Изпращане на съобщения java приложенията се изпълняват асинхронно, т.е. процедурата не чака отговор от получателя. Като получатели на съобщения, които организират опашки (опашка), това може да бъде или софтуер като WebSphere MQ, който свързва приложения чрез канал за съобщения, или WEB контейнер като JBoss, GlassFish, който осигурява съобщения между приложенията на контейнери, или през Интернет с помощта на JNDI.

Статията разглежда примери за изпращане и получаване на съобщения с помощта както на WEB приложение (Java EE), така и на самостоятелно приложение (Java SE). Описанието на примерите е разделено на две части. Тази страница разглежда взаимодействието на WEB приложението с доставчика на HornetQ. Взаимодействието на самостоятелно Java приложение с Websphere MQ е обсъдено тук.

Пример за обмен на съобщение със сървъра JBoss

В първото най-просто уеб приложение "Jms-jboss" за изпращане и получаване на JMS съобщения, сървърът за приложения Wildfly версия 8.2 (по-рано JBoss Application Server или JBoss AS) ще се използва като контейнер.

Конфигуриране на сървъра за приложения на Wildfly

За да използвате Wildfly за JMS съобщения, трябва да бъде конфигуриран конфигурационният му файл /standalone/configuration/standalone.xml. По подразбиране настройките на JMS не са включени в конфигурационния файл и трябва да бъдат дефинирани ръчно. Можете обаче да използвате конфигурационния файл standalone-full.xml, в който сървърът включва JMS настройките на доставчика на HornetQ, за да създадете подходящи опашки и да обменяте съобщения.

Добавете опашка към конфигурационния файл standalone-full.xml в секцията с раздели. Две опашки (ExpiryQueue и DLQ) вече съществуват в подраздела. Нека добавим своя ред testQueue с JNDI „jms/queue/test“:

Например, беше достатъчно да добавите един елемент, който работи в контейнера. Вторият елемент "java: jboss/exported/jms/queue/test" може да работи извън контейнера, т.е. от друг JVM. За него предпоставка е дефиницията в началото на името „java: jboss/exported /“. Разбира се, може да се използват съществуващи опашки (ExpiryQueue и DLQ).

Забележка:
DLQ (Dead Letter Queue) е локална опашка, наричана опашка с мъртви букви. Такава опашка се създава за всеки мениджър на опашки за улавяне на неизпратени съобщения, свързани с проблеми в мрежата или при получателя.

Ако не създадете DLQ, тогава грешките в приложенията могат да прекъснат връзката с каналите. В този случай получаването на съобщения в опашката не само ще спре, но работата може да бъде нарушена и доставчикът на MQ, например, няма да получава и изпълнява администраторски команди. Препоръчваме ви да проектирате приложенията си, за да избегнете тези сценарии. Освен това DLQ трябва да се следи, тъй като съобщенията към тази опашка най-често съдържат грешки.

За да стартирате Wildfly със самостоятелния файл за конфигурация full.xml от IDE на Eclipse, отворете прозореца „JBoss Runtime“ и дефинирайте стойността „Конфигурационен файл“. За целта отворете раздела Сървъри (Перспектива „Java EE“) и щракнете двукратно върху сървъра Wildfly. В прозореца за преглед, който се отваря, кликнете върху връзката „Runtime Enviroment“, която ще отвори прозореца „JBoss Runtime“:

java

За да стартирате сървъра за приложения Wildfly извън IDE на Eclipse с конфигурационния файл standalone-full.xml, можете да използвате партиден файл, в който сте определили файла като параметър: ./standalone.sh -c standalone-full.xml

В края на страницата е Wildfly Server Log, който показва как да създадете подходящите опашки и да свържете приложението MDB към адаптера HornetQ, за да получавате JMS съобщения чрез абонамент.

Пример Описание

Следващата екранна снимка показва структурата на WEB приложението jms-jboss, включително:

  • ServiceServlet - Servlet, използван за изпращане и получаване на JMS съобщения;
  • Изпращач - изпращачът на JMS съобщения;
  • Приемник - MDB приемник на JMS съобщения;
  • jquery-3.2.1.min.js - библиотека jQuery за асинхронни извиквания на ajax сървлети;
  • index.jsp - начална страница на приложението.

Проектът в Eclipse IDE с помощта на maven е представен на следващата екранна снимка.

„jms queue

Списък на ServiceServlet

ServiceServlet се извиква от страницата index.jsp от браузъра с помощта на jQuery. Сервлетът получава като параметри съобщенията „prefix“ и командата „mode“. Сервлетът използва метода sendMessage от класа Sender, за да изпрати JMS съобщението. Изпратените съобщения незабавно се връщат от сървъра на Wildfly към приемника. Сервлетът чете получените съобщения от статичната колекция Receiver.messages и след това го изчиства.

Servlet декорира изпратените и получените съобщения под формата на HTML-код и се връща в браузъра.

Списък с дескриптори на приложения, web.xml

Дескрипторът на приложението web.xml описва ServiceServlet и неговия URL (url-pattern) за извикване, както и страницата на приложението, която се отваря по подразбиране.

Списък на класа на подателя

Класът на подателя се създава и „живее“ заедно с WEB-приложението съгласно анотацията @ApplicationScoped. Инсталацията веднага определя контекста и опашката. Servlet изпраща текстови съобщения чрез извикване на метод sendMessage.

Списък на получателите

Тук трябва да се кажат няколко думи за MDB (Фасул, управляван от съобщение). Обектът MDB се използва за поддържане на асинхронна комуникация в приложение, обикновено заедно с опашки. Клиентът изпраща съобщение до опашката и обектът MDB получава тези съобщения от опашката за абонамент. Клиентът не може директно да се обади на MDB, комуникацията се осигурява чрез JMS съобщения. MDB никога не отговаря на клиента.

Класът на получателя на съобщения е оформен като MDB обект, като се използва анотация, която определя редица параметри, включително JNDI на опашката „jms/queue/test“. Приемникът реализира интерфейса javax.jms.MessageListener, според който той отменя метода onMessage.

Когато се появи съобщение в опашката „jms/queue/test“, сървърът на приложения Wildfly незабавно ще извика метода onMessage на този MDB обект и ще му предаде съобщението javax.jms.Message като параметър, чийто текст ще бъде записан в колекцията от съобщения. Сервлетът има директен достъп до набора от получени съобщения с публичните и статичните модификатори.

Списък на страницата на Index.jsp

Интерфейсът на страницата в браузъра е показан на следващата екранна снимка.

конфигурационния файл

Старт на Wildfly сървър

Сървърът за приложения на Wildfly „регистрира“ цялата информация. Когато стартирате от Eclipse IDE, тази информация се показва допълнително в конзолата. По-долу има информация (в съкратена форма), свързана със JMS сървъра за настройване на опашки и стартиране на приложението "jms-jboss". Предпоследният ред показва MDB (Message Driven Bean) 'Receiver' връзка с доставчика на HornetQ.

Пример за изтегляне

Изходният код на разглеждания пример под формата на проект Eclipse с помощта на Maven може да бъде изтеглен тук (994 Kb).

Тук са представени примери за взаимодействие на Java приложение с Websphere MQ за изпращане и четене на JMS съобщения.