テスト環境で Rebus Servicebus コンソール アプリケーションを Windows サービスとして実行しています。サービスバスは次のように作成されます。
Bus = Configure.With(adapter)
.Logging(l => l.Log4Net())
.Transport(
t => t.UseRabbitMq(ConfigurationManager.AppSettings["RabbitMQ.Url"],
ConfigurationManager.AppSettings["RabbitMQ.Queue"],
ConfigurationManager.AppSettings["RabbitMQ.ErrorQueue"])
.ManageSubscriptions())
.MessageOwnership(d => d.FromRebusConfigurationSection())
.Sagas(s => s.Use(new RavenDbSagaPersister(sagaDocumentStore)))
.Timeouts(t => t.Use(new RavenDbTimeoutStorage(sagaDocumentStore)))
.CreateBus().Start();
アプリ設定は次のようになります。
<add key="RabbitMQ.Url" value="amqp://rabbitUser:password@localhost"/>
<add key="RabbitMQ.Queue" value="myFirstQueue"/>
<add key="RabbitMQ.ErrorQueue" value="myFirstQueue.error" />
ご覧のとおり、RabbitMQ @localhost と通信しています。
これまでのところ、これは魅力のように機能します。
ただし、同じサーバー上に Servicebus の別のインスタンスをセットアップする必要があり (これはテストサーバーであり、複数のブランチがあります)、いくつかの問題に遭遇しました。
2 番目のインスタンスの appsettings は次のようになります。
<add key="RabbitMQ.Url" value="amqp://rabbitUser:password@localhost"/>
<add key="RabbitMQ.Queue" value="mySecondQueue"/>
<add key="RabbitMQ.ErrorQueue" value="mySecondQueue.error" />
最初のサービスへのメッセージの送信を開始すると、2 番目のサービスによってもメッセージが受信されていることがわかります。これは、同じ RabbitMQ インスタンス @localhost を使用しているためだと思います。
私はサービスバスの専門家ではありませんが、別のキューを使用するだけでこの問題を解決できると思っていましたが、そうではありませんでした。
仮想ホストについて読んだことがありますが、それでよろしいですか?
私がしたいこと:
メッセージを service1 に送信 -> 特定のデータベースに保存
メッセージを service2 に送信 -> 別のデータベースに保存
実際に何が起こるか:
メッセージを service1 に送信 -> service1 AND service2 がメッセージを取得し、両方のデータベースに保存します。
誰かが私を正しい方向に向けてもらえますか? :)