当使用ServiceStack向Redis发送消息时,框架会添加所有标准标头(get
,Priority
,...)。但是,是否可以向该邮件添加任何自定义标头?我有一组微服务在彼此之间传递消息,我想要包含一个共享头。
到目前为止,我已经探索了实现我自己的IMessage或IMessageFactory版本,并且在IOC容器中提升它时我已经查看了CreatedDate
中的不同属性,但我还没有找到任何我能找到的地方添加新标题。
提前致谢!
答案 0 :(得分: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。