Общение между PHP и Java с помощью ActiveMQ / Stomp

Задний план

У меня есть две службы, которые должны общаться друг с другом в очереди сообщений. Один из них – устаревшая служба, написанная на PHP, а другая – на Java. Рано, чем позже, служба PHP будет переписана на Java. Нынешний способ общения друг с другом состоит в том, чтобы писать в общую базу данных, которую выполняет другая служба. Это то, что я пытаюсь уйти и заменить на очередь сообщений.

проблема

Связь, с которой я сейчас работаю, – это служба PHP для службы Java. Ему нужно отправить относительно сложный объект (строки и целые числа и списки и карты строк и целых чисел). В идеале решение будет работать на PHP и идеально подходит для Java, поскольку это будет наследие этого проекта.

Возможные решения

    1.

    Решение, с которым я столкнулся, заключается в том, чтобы вставлять сообщения из PHP / Stomp с помощью преобразования jms-json-object . Сообщения специально создаются JSON таким образом, что когда они выгружаются в Java с помощью readObject , их можно восстановить до полного объекта с помощью XStream . Эта реконструкция происходит внутри ActiveMQ, и я просто должен убедиться, что необходимые псевдонимы и преобразователи на месте. Когда мы, наконец, заменим PHP-компонент Java, отправка сообщения будет просто вопросом использования writeObject .

    Для PHP есть клиент STOMP,

    http://pecl.php.net/package/stomp

    На мой взгляд, вы должны поддерживать взаимодействие компонентов без конкретных реализаций. ActiveMQ глючит, и многие системы удалили его в пользу RabbitMQ или Sun OpenMQ. Вам нужно избегать кодирования подпрограмм «отправить сообщение» на PHP, вместо этого создать сервлет «SendMessage» и использовать завиток для отправки сообщения JSON. Затем сервлет будет использовать фабрику соединений и т. Д. С небольшими накладными расходами вы освободите PHP-компонент от любого определенного кода mq-сервера. Вы можете использовать TextMessage с загрузкой JSON, кодировать и декодировать его с помощью Jackson.