Соединение AMQP и XMPP

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

Я пытался использовать xmppy, но он перестал работать, и я наткнулся на SleekXMPP, который выглядит намного лучше.

Мне просто интересно, определяю ли я прослушиватель AMQP для автоматического вызова метода «отправить» XMPP в боте. Таким образом, он будет прослушивать как AMQP, так и XMPP одновременно.

Спасибо за помощь!

Редактировать: будет ли BOSH здесь намного лучшим решением?


person Tabiko    schedule 17.07.2011    source источник
comment
Трудно сказать, в чем заключается ваш вопрос. Можете ли вы опубликовать код, который у вас есть до сих пор?   -  person SingleNegationElimination    schedule 17.07.2011


Ответы (3)


Самая интересная часть вашего решения будет заключаться в том, что многие библиотеки в этом пространстве предполагают, что они являются единственным циклом обработки событий. Вам нужно либо поместить каждый в отдельный поток (казалось бы проще, но чревато скрытыми проблемами блокировки), либо использовать неблокирующий подход ввода-вывода, например Twisted (но вам понадобится библиотека AMQP) или извлеките файл сокета дескрипторы из каждой из библиотек, которые вы используете, и запускайте над ними select() или poll(), чтобы узнать, есть ли данные для чтения. Из этих трех подход Twisted кажется мне самым простым.

BOSH только усложнит задачу. Не ходи туда.

person Joe Hildebrand    schedule 18.07.2011
comment
Я играл сегодня с этим и через 2 часа вспомнил, что посмотрю здесь. Если кто-то читает это и находится в том же вопросе. Запустите прослушиватель AMQP (я использую Pika) и установите SleekXMPP как многопоточный процесс ( xmpp.process(threaded=True)) . Это работает до сих пор. Оба слушателя находятся в одном файле. - person Tabiko; 18.07.2011

Это действительно очень просто. Я предлагаю вам начать с написания прослушивателя AMQP, который просто распечатывает полученные сообщения. Как только вы заработаете, должно быть очевидно, как интегрировать это в бота XMPP.

person Michael Dillon    schedule 17.07.2011

Вы можете использовать ejabberd и подключаемый модуль xmpp следующим образом: https://github.com/rabbitmq/rabbitmq-xmpp

person TlmaK0    schedule 21.01.2012