Опис задачі
Комунікація PHP<->JAVA через черги повідомлень.
Все частіше приходиться зустрічатись із ситуаціями, коли необхідно інтегрувати різні платформи; наприклад, PHP та Java.
Веб сервіси надають можливість взаємодіяти між платформами. Але така взаємодія є досить обмеженою, оскільки інтегруються тільки сервіси, які можуть викликати методи один одного синхронним чи асинхронним способом. Такі речі, як черги повідомлень (message queues), до останнього часу були досить складними для інтеграції. Черги повідомлень все більше проникають зі світу корпоративних проектів у світ веб проектів, де вони надають досить елегантний шлях для покращення характеристики масштабування проектів. Даний туторіал демонструє як працювати з JMS чергами повідомлень в Java та PHP. Опис технологій
JMS
(JMS) це API, частина специфікацій Java Enterprise Edition, що описує механізми обміну повідомленнями між двома чи більше клієнтами. JMS існує досить довго, є перевіреним часом та використовується в багатьох проектах. З більш відоміших можна назвати LinkedIn. Клієнти взаємодіють за допомогою брокерів повідомлень (message broker), наприклад, таких як , які беруть на себе відповідальність за координацію та доставку повідомлень.
Хоча прості сценарії використання реалізуються відносно легко, JMS API є досить складне, та тісно пов'язане з Java. Цей факт ускладнив використання JMS поза межами Java платформи.
STOMP
(STOMP) це полегшений текстовий протокол обміну повідомленнями. Головною ідеєю протоколу є простота, яка має полегшити використання та створення клієнтів для різних платформ і мов програмування. Завдячуючи цьому, протокол є відносно поширеним серед PHP, Python та інших платформ.
Існує багато брокерів які підтримують STOMP. ActiveMQ є також досить популярним для цього протоколу.
ActiveMQ
це брокер повідомлень з відкритим кодом, який підтримує та механізмів взаємодії з чергами повідомлень, також на даний момент є дуже популярним серед розробників. Для нашого випадку він цікавий тим, що дозволяє використовувати та поєднувати STOMP та JMS черги повідомлень. Іншими словами, ActiveMQ надає можливість прозоро взаємодіяти з JMS чергами в PHP за допомогою STOMP. Реалізація
Для цього проекту необхідні наступні речі:
Java 5+ (http://java.sun.com/javase/downloads/index.jsp)
PHP 5 (http://www.php.net/downloads.php)
Maven 2+ (http://maven.apache.org/release-notes.html)
PHP STOMP Client (http://stomp.codehaus.org/PHP)
Проект складається з 5 частин:
Брокера повідомлень (message broker), JMS продюсера (producer), споживача (consumer) на Java, STOMP продюсера та споживача на PHP.
Брокер можна завантажити з , або використати як додаток (plugin) до Maven проекту. Другий випадок є більш гнучкішим, так як треба менше розбиратись з конфігурацією.
Щоб створити новий модуль слід виконати наступну команду:
Таким описом ми використаємо та вкажемо всі необхідні залежності.
Так як ми будемо використовувати нестандартну конфігурацію, необхідно її описати.
Файл pom.xml вже містить звернення до activemq.xml файлу. Для опису конфігурації слід створити папку «conf» та додати туди файл «activemq.xml» з наступним вмістом:
Клас App реалізує інтерфейс MessageListener, що надає йому можливість обробляти події в методі onMessage. В цьому методі кожне повідмлення типу TextMessage буде виведене на екран.
Існують різні топології(схеми) відсилання повідомлень. В JMS підтримуються «черги» (queue) та «теми» (topic). Коли використовується черга, одне повідомлення буде надіслане будь-якому споживачеві черги. Споживач вибирається довільним чином, або згідно з правилами. Коли використовується тема, кожне повідомлення буде надсилатись всім споживачам. В нашому випадку використовується черга.
Споживач — готовий. Щоб його запустити слід виконати наступну команду в його ж папці:
Насправді там з конфігурації є тільки conf/activemq.xml, в якому декілька стрічок коду.
Коду дійсно не мало, але він повноцінний. Плюс був використаний Maven, який в любому випадку використовується на більшості, якщо не всіх комерційних Java проектах
MemcacheQ — виглядає цікаво. Хоча, якщо я правильно зрозумів, використана модель повідомлень є PULL, а не PUSH (типу JMS/AMQP та інших). Тобто у великих системах (50+ серваків) воно буде не ефективним для типових сценаріїв.
Коментарі (2)
RSS згорнути / розгорнутиaleks_raiden
Коду дійсно не мало, але він повноцінний. Плюс був використаний Maven, який в любому випадку використовується на більшості, якщо не всіх комерційних Java проектах
MemcacheQ — виглядає цікаво. Хоча, якщо я правильно зрозумів, використана модель повідомлень є PULL, а не PUSH (типу JMS/AMQP та інших). Тобто у великих системах (50+ серваків) воно буде не ефективним для типових сценаріїв.
Коротко кажучи, треба ще подивитись :)
zenyk
Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.