問題タブ [message-bus]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - WCF - ロードバランサーの背後でエンドポイントアドレスを自動的にサブスクライブする方法は?
クライアントで操作を実行するミニ メッセージ バスを作成しました (キャッシュのクリアなど)。私はそれを動的にしようとしているので、追加されたすべての新しいアプリケーションが自動的にエンドポイントをバスにサブスクライブして、バスが後で通信できるようにします。アプリケーションはロード バランサーの背後にあるため、新しい各アプリケーションの明示的な IP を使用してサブスクライブしようとしました。証明書が IP ではなくドメイン名に対して発行され、TransportWithMessageCredential セキュリティ モードを使用しているため、「権限のある SSL/TLS セキュア チャネルの信頼関係を確立できませんでした」というエラーが発生しました (使用しないことを好みます)。アプリケーション全体に適用されるため、ServicePointManager.ServerCertificateValidationCallback トリック)。
追加されたすべての新しいサーバーがメッセージバスにサブスクライブでき、メッセージバスがそのサーバーノードで具体的に操作を実行できるように、この動的な動作をどのように実現できますか?
scala - アクター間の通常のメッセージ受け渡しの代わりにメッセージ バスを使用する (例: scala)
Scala でゼロから再実装する予定の Java Web サービスがあります。私は、約 10 ~ 20 人のアクターを使用して、新しいコードのアクター ベースの設計を行っています。ユースケースの 1 つには、次のようなフローがあります。
Actor
A
はメッセージを取得し、Actor によって処理されるa
数十のメッセージを作成し(負荷分散のために複数のインスタンスを作成することもできます)、Actor に対して複数のメッセージを生成します。b
B
c
C
上記のシナリオでは、1 つのメッセージa
で数千のメッセージが送受信される可能性がありますが、1 日に数件以上のメッセージが送信されるとは考えていませんa
(はい、現時点では忙しいサービスではありません)。
次の要件があります。
- メッセージは失われたり、繰り返されたりしてはなりません。システムが b メッセージの処理中に再起動された場合、未処理のメッセージは再起動後に取得する必要があります。一方で、処理されたものは再び取得されるべきではありません (これらのメッセージは最終的に大きな計算を開始し、それらを繰り返すことはコストがかかります)。
- 簡単に拡張できる必要があります。つまり、将来的には、すべての通信 (またはその一部) を読み取ることができる他のコンポーネントをシステムに追加して、たとえば、何が起こったかのログを作成したり、処理された b メッセージの数を数えたりしたいと思うかもしれません。これらの「コンポーネント」は、他の言語で書かれた独立したアプリケーションである可能性があることに注意してください。
私はメッセージ バス テクノロジに慣れていませんが、読んだ内容から、これらの要件は、RabbitMQ、Kafka、Kestrel などの「メッセージ バス」が提供するもののように思えますが、akka も永続化のための手段を提供していることがわかります。私の問題は、非常に幅広い可能性を考えると、どのテクノロジーを使用すればよいか分からないことです。Kafka のようなものは、おそらく私のアプリケーションにとってはやり過ぎだということを読みました。しかし、akka の永続性が私の 2 つの要件 (特に拡張性) を満たすかどうかもわかりません。
私の質問は、エンタープライズ メッセージ バスを使用する必要があるかどうかです。カフカみたいな?それともakkaの持続性のようなものでしょうか?それとも、自分で何かを実装した方がより高速で適切でしょうか (たとえば、拡張性を可能にする AMQP をサポートしています)?
もちろん、この目的に適合するものを知っている場合は、特定のテクノロジーの提案も歓迎します。
python - Publish-Subscribe とメッセージ バス Python
一部の Python モジュールの集中ログ システムを作成しようとしています。多数のモジュールからログ付きのメッセージを送信できるようにしたいのですが、中央ロガーがそれらを受け取り、処理を行います。
簡単にするために、モジュール A を次のようにします。
およびロガー(唯一のサブスクライバー)
現在、Logger モジュールはライブラリのように動作するため、永続的に実行されるわけではありません。そのため、Logger とメッセージ バスの間に新しいメッセージを常に監視する何かを導入できるかもしれません。
私はPyPubSubを見てきましたが、ドキュメントで実行中の異なる python モジュール間の永続的な通信を導入していないようです。誰かがこれを試した場合、異なるモジュール間でこれを使用できればうまくいきます。
もう 1 つの落とし穴は、Python で記述されていないモジュールになってしまう可能性があることです。そのため、モジュール A、B、および Logger の間で直接通信する必要はありません。最終的に、私のアーキテクチャは次のようになります。
上記の情報が混乱しないことを願っています。
tl;dr : Python の永続的なメッセージ バスと、新しいメッセージを常に待機しているサブスクライバーを使用したパブリッシュ-サブスクライブ。すぐに使えるソリューションはありますか?
編集: Logger モジュールを認識している Web ソケット サーバーを実行することを検討しており、他のモジュール A、B は Websocket のアドレスを認識しています。この設計に欠点はありますか?
java - 内部マイクロサービス呼び出しのメッセージ バスと Quasar/HTTP の比較
内部ノード間通信に現在 HTTP/REST を使用しているマイクロサービス アーキテクチャの最適化を検討しています。
1 つのオプションは、バックプレッシャ機能をサービスに実装することです (たとえば、Quasar のようなものをスタックに統合することによって)。これは間違いなく物事を改善するでしょう。しかし、いくつかの課題があります。1 つは、非同期クライアント スレッドが一時的 (メモリ内) であり、クライアントに障害 (クラッシュ) が発生すると、これらの再試行スレッドが失われることです。2 つ目は、理論的には、ターゲット サーバーがしばらくダウンしている場合、クエーサー ファイバーであってもスレッドが最終的に制限されるため、クライアントは再試行を試みて最終的に OOM に到達する可能性があります。
少し偏執的であることはわかっていますが、キューベースの代替手段が非常に大規模な場合により有利になるかどうか疑問に思っています。
ただし、a) キューが中央で管理され、クライアント JVM から切り離されていること、b) キューが永続的であるため、クライアントやターゲット サーバーがダウンした場合、処理中のメッセージがないことを除きます。失われます。
もちろん、キューの欠点は、ホップが多くなり、システムの速度が低下することです。しかし、Quasar の ROI がピークに達し、一元化された耐久性のあるキューがスケーリングと HA にとってより重要になるスイート スポットがおそらくあると思います。
私の質問は:
このトレードオフは議論されましたか? サービス内通信に集中型の外部キュー/ルーター アプローチを使用することに関する論文はありますか。
TL;DR; この質問はおそらく次のように表現できることに気付きました。
「マイクロサービス アーキテクチャ内で直接 HTTP を使用するのではなく、メッセージ バス ベースのサービス内通信を使用するのが適切なのはいつですか。」
c# - ObserveOnDispatcher は UI スレッドでハンドラを呼び出さない
Rx を使用して WPF アプリケーションで複数のスレッド イベントをプッシュするメッセージ バス クラスがあります。私の問題 ObserveOnDispatcher は、UI スレッドでイベント ハンドラーを呼び出しません。
コード:
python - pykafka を使用してトピックの特定のパーティションで公開する
pykafka
トピックの特定のパーティションにメッセージを公開するにはどうすればよいですか。次のコードのテスト トピックには 4 つのパーティションがあり、各メッセージをその 1 つに書き込むつもりですが、どうやらそのようには機能していないようです。
ruby-on-rails - NotImplementedError (部分的なハイジャックのみがサポートされています。) message_bus を使用
gem ファイルに gem を追加して、js コンソールに書き込むだけです。
それはスローします:
私はこれのためにマスターに基づいています: