2011-02-08 6 views
25

Bus.Publishを使用してメッセージを公開し、Bus.Sendを使用してメッセージを送信する際の重要な違いは何ですか?私はそれらがどのように異なっているのか、そして、私が他のものを使用することを選択すべきときを理解するために探しています。NServiceBusのBus.PublishとBus.Sendの違いは?

答えて

28

公開は、特定のイベントを複数のサブスクライバに通知するために使用されます。公開エンドポイントには、メッセージの送信先を特定するためのサブスクリプションストレージがあります。通常、送信はエンドポイントにコマンドを発行するために使用されます。コマンドはエンドポイントに何かをさせることを意味しており、応答を期待してはいけません(NSBがこれをサポートしている場合もありますが)。

Send()の送信先が表示されない理由は、設定経由で送信先を指定するためです。 app.configでは、メッセージタイプ(アセンブリ全体またはクラス)を宛先にマップします。あなたがそうするとき、あなたは目的地を提供する必要はありません。

+0

ありがとうアダム - それは構成が果たす役割を私は見ていない。 –

+0

Err、上のコメントは読んでいるはずです:ありがとうございましたアダム - 今、私は構成が果たしている役割を見ています。 –

+0

Bus.Sendのオーバーライドの1つはBus.Send(文字列の宛先、メッセージ)です。そのため、Bus.Sendを使用して特定のキューに送信できます。 – RandomUs1r

14

Bus.Publish:メッセージの送信先がわからない場合(0〜多数のユーザ)。
Bus.Send:特定のハンドラ(クライアントからサーバー)にメッセージを送信しているとき。

+0

大丈夫ですが、なぜ(一部の送信を行う)は、宛先を持っていないオーバーロード?混乱しています... –

+4

私たちは意味の意味をもう少し持ちます。パブリッシュはイベントであり、私たちはイベントを「ちょっと、何かが起こった、私はあなたがこの情報で何をしても気にしないが、ここで行く」と扱います。私はあなたに何かをさせる必要があり、結果として起こることを気にします(したがって、私が誰に送っているかを知る)」 – Matt

+2

@SeanKearonはい、あなたはこれを4年前に投稿しました。 sendコマンドの宛先は、構成で定義できます。コード構成情報には本当に必要な情報がないので、Send()の単純な形式を使用できます。Send()は、構成内で定義されている場合は、宛先としてパラメーターを使用しません。 – XenoPuTtSs

0

UsusallyにContext.Publish())(イベントタイプとContext.Sendを公開するためであるコマンドタイプ

+1

ようこそ。あなたの答えには何かがないと思われますか? –

+0

yest私はちょうどそれを編集しました。 – Vakar

関連する問題