我有一个 python 脚本,它将在需要访问消息队列(RabbitMQ)或通过 HTTP 接收订阅事件的本地机器上运行。我研究了几种解决方案,但似乎没有一个是本机设计允许桌面客户端通过 HTTP 访问它们的。我认为使用 Twisted 作为代理也是一种选择。任何指导或建议将不胜感激。提前致谢。
3 回答
选择 #1 您可能对此RabbitHub感兴趣
选择#2 如果您希望它位于端口#80 上,您不能使用代理进行端口转发吗?这可能具有挑战性,但
选择#3 如果你的脚本没有与 RMQ 消息格式紧密耦合,你可以试试 celery(它在下面使用 RMQ),如果你想直接触发任何其他应用程序,你可以尝试celery Http gateway或celery web hooks
启动它可能很耗时。然而,Celery 带来了极大的灵活性
选择 #4 对于我的一个项目,我开发了一个中间 Web 服务(Flask Service)来使用 RMQ 并不理想,但它在当时起到了作用。
我决定使用 wamp http://wamp.ws/。仍在尝试它,但它目前运行良好。
我在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 部分并构建一个简单的工作队列了。