【问题标题】:Python pubsub / message queue over HTTP?通过 HTTP 的 Python pubsub / 消息队列?
【发布时间】:2013-11-10 17:53:01
【问题描述】:

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

【问题讨论】:

    标签: python rabbitmq twisted publish-subscribe amqp


    【解决方案1】:

    我在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 部分并构建一个简单的工作队列了。

    【讨论】:

    • 是的,我看过这个教程,但看起来它是为使用端口 5672 而设计的。
    • 你需要在不同的端口上配置它吗?
    • 是的,我想要一些旨在通过 HTTP 运行的东西,而不仅仅是编辑以在端口 80 上运行,因为可能会有其他后果和冲突。
    • 是的,当然。这个怎么样,也许它可以帮助AMQP HTTP Rest,因为RabbitMQ使用这个协议。
    • 我也研究过那个。我实际上找到了这个链接pubs.vmware.com/vfabric5/index.jsp?topic=/…,并在“网络消息”下列出了几个解决方案,但似乎没有一个是成熟的。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

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

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

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

      【讨论】:

        猜你喜欢
        • 2023-03-04
        • 1970-01-01
        • 2015-12-08
        • 2017-04-23
        • 2014-11-17
        • 1970-01-01
        • 1970-01-01
        • 2016-06-02
        • 2012-10-20
        相关资源
        最近更新 更多