2016-05-14 7 views
1

メッセージがServiceStackを使用してRedisに送信されると、フレームワークはすべての標準ヘッダー(PriorityCreatedDate、...)を追加します。ただし、そのメッセージに任意のカスタムヘッダーを追加することは可能ですか?私はお互いにメッセージを渡す一連のマイクロサービスを持っています。私は共有ヘッダーを含めたいと思います。ServiceStack Redisメッセージにカスタムヘッダーを追加することはできますか?

これまでのところIMessageまたはIMessageFactoryの独自のバージョンの実装を検討しましたが、RedisMqServerの中のさまざまなプロパティをIOCコンテナでブロッキングすると調べましたが、どこにでも新しいものを追加できますヘッダ。

ありがとうございます!

答えて

2

あなたは例えば、任意のユーザ定義のタグテキストを送信するためにIMessage.Tagを使用することができます。

using (var mqClient = mqServer.CreateMessageQueueClient()) 
{ 
    mqClient.Publish(new Message<HelloIntro>(new Hello { Name = "World" }) { 
     Tag = "Custom" 
    }); 
} 

そうでなければ、私は今も新しいのカスタムヘッダを送信できるようになりますどのカスタムヘッダin this commitを送信するためのサポートを追加しましたIMessage.Meta文字列辞書、例えば:

using (var mqClient = mqServer.CreateMessageQueueClient()) 
{ 
    mqClient.Publish(new Message<HelloIntro>(new Hello { Name = "World" }) { 
     Meta = new Dictionary<string, string> { { "Custom", "Header" } } 
    }); 
} 

あなたのMQ RegisterHandlerにアクセスすることができ、例えば:

mqServer.RegisterHandler<Hello>(m => 
    new Message<HelloResponse>(new HelloResponse { 
     Result = "Hello, {0}!".Fmt(m.GetBody().Name) 
    }) { 
     Meta = m.Meta 
    }); 

MQハンドラは、カスタムヘッダーの完全なラウンドトリップを可能にするIMessage応答も返すようになりました。

この変更はv4.0.57から入手できます。現在はavailable on MyGetです。

+0

ありがとう@mythz! ServiceStackの最新バージョンにアップグレードし、Metaプロパティを利用する必要があります。そのような短い順序でそれを実装していただきありがとうございます!私はタグをRedisにうまく渡すことができました。今、それを消費する面では、私は 'GlobalMessageRequestFilters'でそれにアクセスできますか?さもなければ、どのハンドラに対しても 'RegisterHandler'で取得する必要はありません。どうすればそれにアクセスできますか?私がハンドラを設定した理由は、 'message_server.RegisterHandler (ServiceController.ExecuteMessage);'もう一度ありがとう! – napo

+1

@napo 'BasicRequest.Message'プロパティにアクセスするには' IRequest'を 'BasicRequest'にキャストする必要があります。 – mythz

+0

!ありがとう、それはトリックです!私はそれをIMessage/Messageとしてキャストしようとしていて、それから何も得ることができませんでした。今私はそれを得ることができます - 完璧!今、最後の質問は...すべてのメッセージにタグを追加する方法があるので、私が作成するすべてのメッセージに明示的に追加する必要はありませんか?再度、感謝します! – napo

関連する問題