AMQP与XMPP互联

0 投票
3 回答
578 浏览
提问于 2025-04-16 21:42

我想找个方法,写一个XMPP机器人,它可以监听RabbitMQ的消息队列,然后把新问题的消息发送到XMPP频道,通知用户(我已经让Nagios把通知发送到RabbitMQ了)。

我试过用xmppy,但它不太好用,后来发现了SleekXMPP,看起来要好一些。

我在想,如果我定义一个AMQP监听器,让它自动调用机器人里的XMPP“发送”方法,这样它就可以同时监听AMQP和XMPP了。

谢谢你的帮助!

补充:使用BOSH会不会是更好的解决方案呢?

3 个回答

0

你可以使用ejabberd和一个叫做xmpp的插件,像这个https://github.com/rabbitmq/rabbitmq-xmpp

1

这其实非常简单。我建议你先写一个AMQP监听器,功能就是把收到的消息打印出来。等这个部分能正常工作后,你就会很清楚怎么把它整合进一个XMPP机器人里了。

1

你解决问题时最有趣的部分是,很多库在这个领域都假设它们是唯一的事件循环。你要么把每个库放在自己的线程里(看起来简单,但可能会有一些隐藏的锁定问题),要么使用像Twisted这样的非阻塞I/O方法(但你还需要一个AMQP的),或者把你使用的每个库的socket文件描述符提取出来,然后用select()或poll()来检查是否有数据可以读取。在这三种方法中,我觉得Twisted的方法是最简单的。

BOSH会让问题变得更复杂。不要走这条路。

撰写回答