Сериализация объектов для асинхронного обмена сообщениями - PullRequest
4 голосов
/ 01 декабря 2008

Я подумываю об использовании AMQP (с использованием qpid), чтобы позволить смеси служб Python и Java взаимодействовать друг с другом. Базовый обмен текстовыми сообщениями кажется достаточно простым, но, как и в случае с любой другой технологией обмена сообщениями, которую я исследовал, на этом все и заканчивается. Если бы не создание приложений для обмена мгновенными сообщениями, я бы подумал, что отправка строк не особенно полезна, хотя пример за примером демонстрирует отправку неформатированного текста.

Мой инстинкт заключается в том, чтобы использовать XML (де) сериализацию или что-то подобное (JSON, YAML, Protocol Buffers и т. Д.), Который имеет хорошую поддержку библиотек на обоих языках. Является ли это наилучшей практикой и, если да, какой (де) сериализационный протокол люди рекомендуют? Или я где-то упускаю суть и должен быть довольно доволен, отправляя небольшие кусочки текста?

Ответы [ 3 ]

6 голосов
/ 03 декабря 2008

Оуэн, могу я сказать пару слов о RabbitMQ.

AMQP - это двоичный протокол, и вы, безусловно, можете сделать гораздо больше, чем просто отправлять строки! Какой клиент Python вы планируете использовать? Мы рекомендуем клиент Барри Педерсона для большинства применений: http://barryp.org/software/py-amqplib/ Приглашаем вас посетить список RabbitMQ и задать любые вопросы, которые вам нравятся, относительно вашего поста и комментариев: -)

Как указывает Джеймс, JSON - это добро. RabbitMQ поддерживает JSON-RPC через HTTP, подключаясь к серверу AMQP. Люди также используют RabbitMQ с Orbited для приложений типа кометы.

Кроме того, мы поклонники и поддерживаем XMPP, а также STOMP, которые изобрел Джеймс. STOMP удобен для определенного класса приложений обмена сообщениями, а RabbitMQ поддерживает его как для прямой, так и для тематической маршрутизации. Мы нашли хороший способ взаимодействия с ActiveMQ, предпочитая JMS в этом сценарии.

Я надеюсь, что вы найдете подходящий сервер для своих вариантов использования и порекомендуете попробовать разные комбинации для достижения наилучших результатов.

Приветствия

Alexis

2 голосов
/ 02 июня 2009

Несмотря на это, у меня был хороший опыт использования буферов протокола AMQP +.

Если отправитель сериализует сообщения, вам, вероятно, потребуется включить идентификатор в заголовок, чтобы вы знали, как десериализовать на принимающей стороне. Тем не менее, это не так уж и сложно сделать.

1 голос
/ 02 декабря 2008

XML или JSON, вероятно, самые простые. Протоколные буферы - это круто, но я бы отнесся к ним как к оптимизации, о которой можно будет подумать позже, если вам действительно это нужно (поскольку немного сложнее использовать, по сути, двоичный проводной формат).

Кстати, вы можете посмотреть на Stomp, а не на AMQP; у него стало больше клиентских библиотек и поддерживаемых брокеров сообщений. например Apache ActiveMQ , который намного более популярен, чем qpid или rabbitmq - или вообще любой JMS-провайдер будет работать просто отлично.

...