2017-10-09 7 views
0

AMQPプロトコルを使用してRabbitMQコンシューマがメッセージのキューをリッスンすることは可能ですか?私は、nginxがHTTP/sプロトコルのみをサポートしていることを認識しています。これがtcpモジュール拡張を使って達成できるのかどうか疑問に思っていました。NGINXのAMQP/RabbitMQコンシューマ

私はAPIゲートウェイとしてnginxを使用しており、すべてのバックエンドサービスがHTTP上で公開されているため、AMQPからHTTPへのプロトコル変換を行いたいとします。

答えて

0

自分のC拡張を書くことは間違いありません。 nginxはsuitable for TCP proxyingなので、nginxを使って自分のTCPパケットをRabbitMQに送ることができなかった理由はありません。したがって、nginxをRabbitMQコンシューマとして使用します。それを実行させるためには、おそらく多くの作業があり、安定して信頼できるものにするためにはもっと多くの作業が必要です。しかし、私は賛成をしないでください。より良い、よりエレガントでシンプルなソリューションが常に存在します。

消費中にソケットを開いたままにしておく必要があるため、HTTPは確かに(amqpの意味で)キューからの消費には適していません。しかし、RabbitMQ(そして明らかに、somebody has already done this)へ/からメッセージをパブリッシュ/取得するためのC拡張を書くことができます。もしあなたがCにあまり関わっていない場合や、独自のnginxパッケージを維持したくない場合は、lua-nginx-module用のLUA拡張を書くこともできます(もう一度、somebody seems to have worked in this direction)。これらは、nginxからMQと通信するためのPoCですが、消費者ではありません。どちらの拡張もHTTPのコンテキストで動作するようですので、あなたはかなり速く答えてください(そしてソケットを閉じる必要があります)。

しかし、私が知る限りでは、直接的または間接的にこの目的に役立つような、コミュニティ主導型のよく維持されたプロジェクトはありません。独自の内線/クライアントを作成し、維持する必要があります。さらに、nginxはあなたの現在のAPIゲートウェイです。リスクを考慮に入れてください。事は本当に間違っている可能性がありますあなただけが、それが面倒であるかどうかを知ることができますが、それはおそらくそうではありません。

あなたが正確に探しているものに関する多くの情報を提供していないので、私はNGINX/AMQPの部分であなたに答えました。しかし、RabbitMQのHTTPインタフェースを探しているだけかもしれません。この場合、Management Pluginが行く方法かもしれません。それはかなり涼しいHTTP APIを持っています。もう一度、ステートフルな機能(基本消費、ack/nack/rejectsなど)をすべて失うことになりますが、それはHTTPの設計方法によるものです。

最終的に、RabbitMQの「基本」コンシューマーが本当に必要な場合は、適切なコンシューマーを別のアプリケーションとして作成し、nginxでこれを行うことを忘れてください。これは間違いなく最も優れた、最もサポートされているソリューションです。

関連する問題