是否可以向ServiceStack Redis消息添加自定义标头?

时间:2016-05-14 19:16:31

标签: c# redis servicestack messaging

当使用ServiceStack向Redis发送消息时,框架会添加所有标准标头(getPriority,...)。但是,是否可以向该邮件添加任何自定义标头?我有一组微服务在彼此之间传递消息,我想要包含一个共享头。

到目前为止,我已经探索了实现我自己的IMessage或IMessageFactory版本,并且在IOC容器中提升它时我已经查看了CreatedDate中的不同属性,但我还没有找到任何我能找到的地方添加新标题。

提前致谢!

1 个答案:

答案 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