您可以使用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。
Thanks @mythz!我一定要升級到最新版本的ServiceStack並利用Meta屬性!感謝您在如此短的時間內執行此操作!我能夠很好地將標籤傳遞給Redis。現在,就消費而言......我可以通過'GlobalMessageRequestFilters'訪問它嗎?否則,我將如何訪問它,而不必在每個處理程序的'RegisterHandler'上獲取它?我也問的原因是,我的處理程序設置爲:'message_server.RegisterHandler(ServiceController.ExecuteMessage);'再次感謝! –
napo
@napo您需要將'IRequest'強制轉換爲'BasicRequest'來訪問'BasicRequest.Message'屬性。 – mythz
!謝謝,這就是訣竅!我試圖將它作爲IMessage/Message進行投放,並且無法從中獲取任何內容。現在我能夠得到它 - 完美!現在,最後一個問題......是否有一種方法可以將標記添加到每條消息中,所以我不必將其明確地添加到我構建的每條消息中?再次感謝! – napo