Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
HTTP上的Python pubsub/消息队列?_Python_Rabbitmq_Twisted_Publish Subscribe_Amqp - Fatal编程技术网

HTTP上的Python pubsub/消息队列?

HTTP上的Python pubsub/消息队列?,python,rabbitmq,twisted,publish-subscribe,amqp,Python,Rabbitmq,Twisted,Publish Subscribe,Amqp,我有一个python脚本,它将在需要访问消息队列(RabbitMQ)或通过HTTP接收订阅事件的本地计算机上运行。我研究过几种解决方案,但似乎没有一种是本机设计的,允许桌面客户端通过HTTP访问它们。我认为使用Twisted作为代理也是一种选择。如有任何指导或建议,将不胜感激。提前谢谢 我已经阅读了本教程,它们提供了一些可以解决接收消息问题的库的名称 发件人:send.py #!/usr/bin/env python import pika connection = pika.Blockin

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

我已经阅读了本教程,它们提供了一些可以解决接收消息问题的库的名称


发件人: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()
#!/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()

接收器:receive.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()
#!/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部分并构建一个简单的工作队列了。

Choice#1 你可能对此感兴趣

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

选择#3 如果您的脚本没有与RMQ消息格式紧密结合,您可以尝试芹菜(它在下面使用RMQ),然后您可以尝试,或者如果您希望直接触发任何其他应用程序

把它拿起来可能很费时。然而,芹菜具有很大的灵活性

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

我决定使用wamp。仍在试验,但目前它运行得很好。

是的,我看过本教程,但它似乎是为使用端口5672而设计的。您需要在不同的端口上配置它吗?是的,我想要一些设计为通过HTTP运行的东西,不只是编辑在端口80上运行,因为可能会有其他后果和冲突。是的,当然。这个怎么样,也许会有帮助,因为RabbitMQ使用这个协议。我也研究过这个协议。事实上,我找到了这个链接,在“Web消息传递”下面列出了几种解决方案,但似乎都不成熟。