HTTP上的Python pubsub /消息队列?

时间:2013-11-10 17:53:01

标签: python rabbitmq twisted publish-subscribe amqp

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

3 个答案:

答案 0 :(得分:0)

  

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


发件人: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部分并构建一个简单的工作队列。

答案 1 :(得分:0)

选择#1 您可能对此RabbitHub

感兴趣

选择#2 如果您希望它在端口#80上,那么您是否可以使用代理进行端口转发?这可能具有挑战性,但

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

启动它可能会很费时间。但是,Celery开启了很多灵活性

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

答案 2 :(得分:0)

我决定使用wamp http://wamp.ws/。还在试验它,但它目前运作良好。