【问题标题】:Is it possible to add custom headers to a ServiceStack Redis message?是否可以将自定义标头添加到 ServiceStack Redis 消息?
【发布时间】:2016-09-10 21:09:49
【问题描述】:

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

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

提前致谢!

【问题讨论】:

    标签: c# redis servicestack messaging


    【解决方案1】:

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

    【讨论】:

    • 谢谢@mythz!我一定要升级到最新版本的 ServiceStack 并利用 Meta 属性!感谢您在如此短的时间内实施!我能够将标签很好地传递给 Redis。现在,就消费而言...我可以通过GlobalMessageRequestFilters 访问它吗?否则,我将如何访问它而不必为每个处理程序在 RegisterHandler 上获取它?我问的原因也是,我的处理程序设置如下:message_server.RegisterHandler&lt;MyRequest&gt;(ServiceController.ExecuteMessage); 再次感谢!
    • @napo 您需要将IRequest 转换为BasicRequest 才能访问BasicRequest.Message 属性。
    • !谢谢,这就是诀窍!我试图将它转换为 IMessage/Message 并且无法从中得到任何东西。现在我能得到它——完美!现在,最后一个问题......有没有办法将标签添加到每条消息,所以我不必明确地将它添加到我构建的每条消息中?再次感谢!
    • @napo 您可能会使用RedisMqServer.ResponseFilter 来检查/修改或更改返回的响应。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-19
    • 2018-08-02
    • 1970-01-01
    • 1970-01-01
    • 2013-06-24
    • 1970-01-01
    相关资源
    最近更新 更多