AMINP上的AMQP / RabbitMQ消费者
是否有可能让RabbitMQ Consumer通过AMQP协议监听队列中的消息。 我知道nginx只支持HTTP / s协议。 想知道这是否可以通过使用TCP模块扩展来实现。
我使用nginx作为API网关,并且希望执行从AMQP到HTTP的协议转换,因为所有后端服务都在HTTP上公开。
这绝对有可能写你自己的C扩展。 nginx适用于TCP代理,因此我看不出有什么理由不能使用nginx将自己的TCP数据包发送到RabbitMQ,因此使用nginx作为RabbitMQ使用者。 使其运行可能需要很多工作,甚至更多的工作使其稳定可靠,但是可行。 请帮我一个忙,不要这样做。 总会有更好,更优雅,更简单的解决方案。
HTTP绝对不适合从队列中消费(在amqp意义上),因为在使用时必须保持套接字打开。 但是,您可以编写一个C扩展来发布/从RabbitMQ获取消息(显然,有人已经这样做了)。 如果你对C不太熟悉,或者不想维护你自己的nginx包,你也可以为lua-nginx-module编写一个LUA扩展(再一次,有人似乎在这个方向上工作)。 这些是从nginx与MQ交谈的PoC,但它们不是消费者。 这两个扩展似乎都在HTTP上下文中运行,所以你需要很快地回答(并关闭套接字)。
然而,据我所知,没有任何社区驱动和维护良好的项目直接或间接地为此目的服务; 你必须建立和维护你自己的分机/客户端。 而且,nginx是你当前的API网关。 请考虑风险。 事情可能会变得非常错误。 只有你可以判断这是否值得这个麻烦,但这很可能不是。
既然你没有提供你正在寻找什么的信息,我只是在NGINX / AMQP部分回答你。 但你可能只是在寻找RabbitMQ的HTTP接口。 在这种情况下,管理插件可能是要走的路。 它有一个非常酷的HTTP API。 再一次,你会失去每个有状态的特性(如基本消费,ack / nack / rejects),但这固有地归因于HTTP的设计方式。
最后,如果你真的需要一个RabbitMQ“基础”消费者,我建议你写一个适当的消费者作为一个单独的应用程序,并忘记在nginx中这样做。 这绝对是最好和最受支持的解决方案。
链接地址: http://www.djcxy.com/p/34077.html