【问题标题】:How to re-purpose existing instances of Redis and RabbitMQ with ServiceStack如何使用 ServiceStack 重新利用现有的 Redis 和 RabbitMQ 实例
【发布时间】:2014-12-22 01:52:38
【问题描述】:

在成功开发具有多个 ServiceStack 服务的应用程序后,我们正在转移到其他测试环境,其中很多是由于我们运行 SAAS 模型(也称为多租户)。我想在其中一些环境中重用一些基础基础设施服务,主要是 Redis 和 RabbitMQ。

我们使用 IAppSetting 接口在运行时将我们的配置从多个来源拉到一个内聚的设置对象中,然后是过滤层。由于 tier 驱动每个环境的配置,因此使用 Tier 为任何 RabbitMQ 消息队列添加前缀,并为 Redis 将使用的任何生成的缓存键添加前缀是有意义的,从而为每个环境提供冲突保护。

下面是一个例子:

RabbitMQ => "这里有一些 MQ 方法" => "mq:qa1.Outbound.inq"

Redis => "这里有一些 Redis 方法" => "urn:qa1.somePoco:123"

这是一个示例配置和各种环境

<appSettings>
    <add key="Tier" value="qa1" />
    <!--<add key="Tier" value="dev" />-->
    <!--<add key="Tier" value="tst" />-->
    <!--<add key="Tier" value="stg" />-->
    <!--<add key="Tier" value="prod" />-->
</appSettings>

谢谢你, 斯蒂芬

【问题讨论】:

    标签: servicestack


    【解决方案1】:

    MqNameTests 中有一些关于如何修改队列名称的示例,例如:

    QueueNames.SetQueuePrefix("site1.");
    

    将在 QueueNames 上添加前缀,例如:

    site1.mq:TestPrefix.inq
    

    否则您可以使用QueueNames.ResolveQueueNameFn 来完全控制 MQ 名称,例如:

    QueueNames.ResolveQueueNameFn = (typeName, suffix) =>
        "SITE.{0}{1}".Fmt(typeName, suffix.ToUpper());
    
    
    QueueNames<TestFilter>.In.Print(); // SITE.TestFilter.INQ
    

    请注意,同样的配置也需要在客户端上应用,因此使用相同的 MQ 名称。

    使用 AppSettings 配置 ServiceStack

    ServiceStack 是一个代码优先的框架,这意味着所有配置都在代码中完成,但有一个rich and versatile configuration model,您可以通过阅读AppHost.Configure() 中的应用程序设置来获得您之后的行为:

    QueueNames.SetQueuePrefix(AppSettings.Get("Tier","dev"));
    

    如果您的 Web.config 中不存在 Tier(例如在单元测试中),它将使用 dev 否则将使用您的 appSettings 中的值:

    <appSettings>
        <add key="Tier" value="qa1" />
    </appSettings>
    

    【讨论】:

    • @Stephen 也使用相同的队列名称策略。
    • 只是为了确认一下,即使我们只是将 Redis 用于缓存和会话,这是正确的方法吗?
    • @Stephen 没关系,因为这只会更改 MQ 队列名称,因此只会影响 Redis MQ 而不是 Redis 缓存客户端。
    • 更改了我的问题以阐明我们的 RabbitMQ 消息代理和 Redis 分布式缓存的使用。两者同时使用,但作用不同。
    • @Stephen 没有适用于 Redis 中所有键的全局命名空间前缀。如果你想使用相同的 redis 实例,你可以specify to use a different database,例如?db=2 在连接字符串上。
    猜你喜欢
    • 1970-01-01
    • 2015-01-29
    • 1970-01-01
    • 1970-01-01
    • 2011-09-20
    • 1970-01-01
    • 2021-03-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多