2016-10-31 5 views
1

私は各消費者が自分のプライベートキューでリッスンしたいと思っています。これを行うために、Elixirを使用して各ユーザーのプロセスを作成し、そのプロセスを購読して、プライベートユーザーキューで新しいメッセージを待ち受けます。どうやら私は以上の138を開くことができません138利用可能多くの消費者を扱うrabbitmq、接続とチャンネルの比較

ファイル記述子:256の利用可能 ソケットディスクリプタをRAMの16Gと私のMacBook Proには

、私のRabbitMQ管理パネルは、私がしていることを私に示して接続。

質問1:この制限は何に基づいていますか、それを上げることはできますか?私は、生産マシン上でどのくらい高い可能性があるか(どのような種類のEC2インスタンスが必要か)、ユーザーごとに接続することをお勧めしたいと考えています。私は限界がulimitに関連しているかもしれないと読んだことがあるが、コマンドラインでulimitを実行すると、「無制限」と表示される。

私は4000人のユーザーにサービスを提供する必要があり、年間500-1000人のユーザーが増えます。

もう1つの方法は、ElixirアプリからRabbitmqに1つのtcp接続を行い、各プロセスにチャネルを使用することです。それは動作しますが、少し複雑な設定が必要です。それぞれのプロセスが独自の接続を初期化する代わりに、既存の接続を再利用して代わりに新しいチャネルを開く必要があります。

接続が切れた場合は、共通接続を再開し、プロセスごとにチャネルを再起動するための戦略を立てる必要があります。私はまだそれをどうやって行うのか分かりませんでした。

質問2:チャンネルは良いアイデアですか?すべてのチャンネルを1つの接続にすることは、他の極端なようです。それらがすべて同じ接続上で多重化されている場合、メッセージの帯域幅に問題はありますか?

その他の方法はありますか?

+1

この記事を参照してください:http://stackoverflow.com/questions/18418936/rabbitmq-and-relationship-between-channel-and-connection#18419417 一般的に、あなたが唯一のアプリケーションのための1つの接続をしたいと、おそらく1うスレッドごとのチャネル。 Elixirが並行処理を別々に処理することを考えると、チャンネル数の設定にどのように対処すればよいか本当に答えられません。他の人がその地域でより多くの経験を持つかもしれません! – Paul

+0

Spring AMQPコードが接続とチャネルのプールをどのように使用するのかを確認することをお勧めします。あなたの環境では、1つの接続とベンチマークから始め、それらのプールを試し、チャネルを広げてベンチマークしてください。 –

答えて

1

チャンネルは良いアイデアですか?

はい。

アプリケーションインスタンスごとに1つのオープン接続しかなく、その内部で広範囲にチャネルを使用する必要があります。

TCP/IP接続の速度が遅く、管理コストが高くなります。

チャンネルは馬鹿馬鹿しく高速で、安価に開くことができ、必要に応じて作業して閉じることができます。

関連する問題