0

Bus.SendToQueues を使用するとエラーが発生します。質問の最後に詳細なエラーがあります。

ストレージ アカウントとキーを使用して設定された Azure キューがあり、Bus.SendToSites を使用して、msmq を使用して Azure サイトにメッセージを送信するオンプレミス サービスバス ハンドラーを使用しようとしています。

http://support.nservicebus.com/customer/portal/articles/859548-the-gateway-and-multi-site-distributionに従って、ゲートウェイを起動しようとしています。この構成を使用しています。

App.config: (サイトを正しく設定していますか?)

<section name="GatewayConfig" type="NServiceBus.Config.GatewayConfig, NServiceBus.Core" />
<GatewayConfig>
  <Sites>
    <Site Key="Azure" Address="http://<!--STORAGE ACCOUNT NAME-->.queue.core.windows.net/<!--STORAGE ACCOUNT KEY-->" ChannelType="Http"/>
  </Sites>
</GatewayConfig>

ハンドラ:

Bus.SendToSites(new[] { "Azure" }, message);

実行時に、次の結果が得られます。

エラー: アドレスにメッセージを送信できませんでした: このエンドポイントによって送信されたメッセージの返信アドレスとして使用されるディストリビューターのデータ アドレス..gateway@HFORTE

内部例外: {"フォーマット名が無効です。"}

スタックトレース: System.Messaging.MessageQueue.MQCacheableInfo.get_WriteHandle() で System.Messaging.MessageQueue.StaleSafeSendMessage (MQPROPS プロパティ、ITransaction トランザクション) で System.Messaging.MessageQueue.StaleSafeSendMessage (MQPROPS プロパティ、IntPtr トランザクション) で System.Messaging.QueueMessage .SendInternal(Object obj, MessageQueueTransaction internalTransaction, MessageQueueTransactionType transactionType) at System.Messaging.MessageQueue.Send(Object obj, MessageQueueTransactionType transactionType) at NServiceBus.Transports.Msmq.MsmqMessageSender.Send(TransportMessage message, Address address) in :line 0

トランスポートが MSMQ であることがわかりました。問題は、MSMQ と Azure が異なるトランスポート プロトコルであることです。そうであれば、これはどのように改善されますか?

4

2 に答える 2

2

ゲートウェイを使用するには、送信側と受信側の両方で NSB をホストする必要があります。ゲートウェイは NSB エンドポイントの WCF サービスを開くだけなので、HTTP プロトコルを使用してメッセージを送信できます。

IBus インスタンスはシングルトンであるため、MSMQ と Azure キュー トランスポートを 1 つのソリューションに結合することはできません。RavenDb を使用して独自の「ブリッジ」サービスを開発する必要がありました。Raven を選択したのは、RX 駆動型のイベント サブスクリプション メカニズムも使いやすいためです。また、RavenDb はドキュメント データベースであるため、(いくつかのコンテナーにラップされた) メッセージをそのまま保存することもできます。

于 2014-02-04T09:56:27.290 に答える