1

我有一个 python 脚本,它将在需要访问消息队列(RabbitMQ)或通过 HTTP 接收订阅事件的本地机器上运行。我研究了几种解决方案,但似乎没有一个是本机设计允许桌面客户端通过 HTTP 访问它们的。我认为使用 Twisted 作为代理也是一种选择。任何指导或建议将不胜感激。提前致谢。

4

3 回答 3

0

选择 #1 您可能对此RabbitHub感兴趣

选择#2 如果您希望它位于端口#80 上,您不能使用代理进行端口转发吗?这可能具有挑战性,但

选择#3 如果你的脚本没有与 RMQ 消息格式紧密耦合,你可以试试 celery(它在下面使用 RMQ),如果你想直接触发任何其他应用程序,你可以尝试celery Http gatewaycelery web hooks

启动它可能很耗时。然而,Celery 带来了极大的灵活性

选择 #4 对于我的一个项目,我开发了一个中间 Web 服务(Flask Service)来使用 RMQ 并不理想,但它在当时起到了作用。

于 2013-11-26T20:37:19.073 回答
0

我决定使用 wamp http://wamp.ws/。仍在尝试它,但它目前运行良好。

于 2013-11-27T05:03:41.860 回答
0

我在RabbitMQ 站点上阅读了本教程,它们提供了一些可以解决接收消息的库的名称。


发件人:send.py

#!/usr/bin/env python
import pika

connection = pika.BlockingConnection(pika.ConnectionParameters(
        host='localhost'))
channel = connection.channel()

channel.queue_declare(queue='hello')

channel.basic_publish(exchange='',
                      routing_key='hello',
                      body='Hello World!')
print " [x] Sent 'Hello World!'"
connection.close()

接收方:receive.py

#!/usr/bin/env python
import pika

connection = pika.BlockingConnection(pika.ConnectionParameters(
        host='localhost'))
channel = connection.channel()

channel.queue_declare(queue='hello')

print ' [*] Waiting for messages. To exit press CTRL+C'

def callback(ch, method, properties, body):
    print " [x] Received %r" % (body,)

channel.basic_consume(callback,
                      queue='hello',
                      no_ack=True)

channel.start_consuming()

现在我们可以在终端中试用我们的程序了。首先,让我们使用 send.py 程序发送消息:

$ python send.py
[x] Sent 'Hello World!'

生产者程序 send.py 将在每次运行后停止。让我们接收它:

$ python receive.py
[*] Waiting for messages. To exit press CTRL+C
[x] Received 'Hello World!'

欢呼!我们能够通过 RabbitMQ 发送我们的第一条消息。您可能已经注意到,receive.py 程序并没有退出。它将保持准备好接收更多消息,并且可能会被 Ctrl-C 打断。

尝试在新终端中再次运行 send.py。

我们已经学习了如何从命名队列发送和接收消息。是时候继续第 2 部分并构建一个简单的工作队列了。

于 2013-11-10T18:12:34.147 回答