是否可以将自定义 headers 添加到 ServiceStack Redis 消息中?

Is it possible to add custom headers to a ServiceStack Redis message?

当使用 ServiceStack 将消息发送到 Redis 时,框架会添加所有标准 header(PriorityCreatedDate、...)。但是,是否可以向该消息添加任何自定义 header?我有一组相互传递消息的微服务,我想包括一个共享的 header.

到目前为止,我已经探索了实现我自己的 IMessage 或 IMessageFactory 版本,并且在 IOC 容器中对其进行 boostrapping 时,我查看了 RedisMqServer 中的不同属性,但我还没有找到任何地方我可以添加一个新的 header.

提前致谢!

您可以使用 IMessage.Tag 发送任何用户定义的标签文本,例如:

using (var mqClient = mqServer.CreateMessageQueueClient())
{
    mqClient.Publish(new Message<HelloIntro>(new Hello { Name = "World" }) {
        Tag = "Custom"
    });
}

否则,我刚刚添加了对发送 Custom Headers in this commit 的支持,现在您还可以在新的 IMessage.Meta 字符串字典中发送 Custom Headers,例如:

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 处理程序现在还可以 return 一个 IMessage 响应,它允许完整 round-tripping 任何自定义 headers。

此更改适用于现在 available on MyGet 的 v4.0.57。