是否可以让AMQP通过RabbitMQ协议监听队列中的消息。我知道nginx只支持HTTP/s协议。我想知道这是否可以通过使用tcp模块扩展来实现。
我使用nginx作为API网关,并想做一个从AMQP到HTTP的协议转换,因为所有的后端服务都在HTTP上公开。
发布于 2017-10-10 04:42:00
编写自己的C扩展绝对是可能的。nginx是suitable for TCP proxying,因此我看不出你为什么不能使用nginx向RabbitMQ发送自己的TCP数据包,从而使用nginx作为RabbitMQ消费者。要让它运行,可能需要做很多工作,甚至还有更多的工作要做,才能使它稳定可靠,但又是可行的。帮我个忙,别这么做。总会有更好、更优雅、更简单的解决方案。
HTTP绝对不适合从队列中消费(在amqp意义上),因为您必须在消费时保持套接字打开。但是,您可以编写一个C扩展来向RabbitMQ (显然还有somebody has already done this)发布/检索消息。如果你对C不是很感兴趣,或者不想维护你自己的nginx包,你也可以为lua-nginx-module编写一个LUA扩展(同样,somebody seems to have worked in this direction)。这些是用于从nginx与MQ对话的PoC,但它们不是消费者。这两个扩展似乎都在HTTP上下文中起作用,因此您需要快速响应(并关闭套接字)。
然而,据我所知,没有任何社区驱动和良好维护的项目可以直接或间接地服务于此目的;您必须创建和维护自己的扩展/客户端。此外,nginx是您当前的API网关。一定要把风险考虑进去。事情可能会变得非常糟糕。只有你才能判断是否值得这么做,但很可能不值得。
因为你没有给出那么多关于你到底在寻找什么的信息,所以我只是在NGINX/AMQP部分回答了你。但您可能只是在寻找一个用于RabbitMQ的超文本传输协议接口。在这种情况下,Management Plugin可能是最佳选择。它有一个非常酷的HTTP API。再一次,你会失去所有有状态的特性(比如基本的消费,ack/nack/rejects),但这本质上是由于HTTP的设计方式。
最后,如果你真的需要一个RabbitMQ的“基本”消费者,我建议你写一个合适的消费者作为一个独立的应用程序,并忘记在nginx中做这件事。这绝对是最好和最受支持的解决方案。
https://stackoverflow.com/questions/46644336
复制相似问题