2011-07-17 59 views
0

我正在寻找一种方法来编写XMPP机器人,它将监听RabbitMQ队列并将消息发送到XMPP通道,通知用户任何新的问题(已经有Nagios发送通知给RabbitMQ)。AMQP和XMPP互联

我试过使用xmppy,它停止工作,我偶然发现SleekXMPP看起来相当好。

我只是想知道我是否定义了一个AMQP监听器来自动调用bot中的XMPP“send”方法。所以它会同时在AMQP和XMPP上同时收听。

谢谢你的帮助!

编辑:BOSH会更好的解决方案吗?

+0

这很难说,你的问题是什么。你可以发布迄今为止的代码吗? – SingleNegationElimination

回答

1

解决方案中最有趣的部分是该空间中的许多库都假设它们是唯一的事件循环。你可能需要把它们放在它自己的线程中(看起来更容易,但充满了潜伏的锁定问题),使用非阻塞I/O方法,如Twisted(但你需要一个AMQP library),或者提取套接字文件描述符从你正在使用的每个库中取出,并对它们运行select()或poll()以告知何时有数据要读取。在这三个中,Twisted方法对我来说似乎最简单。

BOSH只会让问题变得更加困难。不要这样。

+0

我今天玩过这个游戏,经过2个小时后,我会在这里看看。如果有人正在阅读本文,并且出现同样的问题。运行AMQP(我使用Pika)侦听器,并将SleekXMPP运行设置为线程化(xmpp.process(threaded = True))进程。它工作到目前为止。两个听众都在同一个“文件”中。 – Tabiko

1

这真的很简单。我建议你首先编写一个AMQP监听器,它只是打印出收到的消息。一旦你得到这个工作,应该很明显的如何将它集成到一个XMPP机器人中。