2016-05-14 108 views
1

當使用ServiceStack將消息發送到Redis時,框架會添加所有標準標頭(Priority,CreatedDate,...)。但是,是否可以將任何自定義標題添加到該消息?我有一組微型服務可以相互傳遞消息,我想包含一個共享標題。是否可以將自定義標題添加到ServiceStack Redis消息中?

到目前爲止,我已經探索實施我自己的即時聊天或IMessageFactory的版本,我已經在IOC容器boostrapping當內RedisMqServer看着不同的屬性,但我還沒有找到任何地方,我可以添加一個新的頭。

在此先感謝!

回答

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

Thanks @mythz!我一定要升級到最新版本的ServiceStack並利用Meta屬性!感謝您在如此短的時間內執行此操作!我能夠很好地將標籤傳遞給Redis。現在,就消費而言......我可以通過'GlobalMessageRequestFilters'訪問它嗎?否則,我將如何訪問它,而不必在每個處理程序的'RegisterHandler'上獲取它?我也問的原因是,我的處理程序設置爲:'message_server.RegisterHandler (ServiceController.ExecuteMessage);'再次感謝! – napo

+1

@napo您需要將'IRequest'強制轉換爲'BasicRequest'來訪問'BasicRequest.Message'屬性。 – mythz

+0

!謝謝,這就是訣竅!我試圖將它作爲IMessage/Message進行投放,並且無法從中獲取任何內容。現在我能夠得到它 - 完美!現在,最後一個問題......是否有一種方法可以將標記添加到每條消息中,所以我不必將其明確地添加到我構建的每條消息中?再次感謝! – napo

相關問題