您可以使用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