ServiceStack.Redis v3 和多主机 - 推荐架构
ServiceStack.Redis v3 and multiple hosts - recommended architecture
我们遇到了 RedisMqServer
的多个实例相互绊倒的问题 - 停止一个服务器会停止其他服务器。显然我们实现的方式是错误的,但我无法确定在这种情况下应该如何使用 RedisMqServer
。
我们的基础设施包括:
- master/slave 配置中的两个 Redis 服务器
- 两个负载平衡的 API 实例(以下称为 'API A')
- 两个负载平衡的 API 实例(以下称为 'API B')
API A 和 B 是两个独立的应用程序,它们使用 ServiceStack.Redis 的 RedisMqServer
相互发送同步和异步消息。我们正在使用 ServiceStack 的开源 v3 修订版。
两个 API 都配置了 RedisMqServer
,因为异步通信发生在两个方向。
处理 RedisMqServer
时,它会在 mq:topic:in
频道上发送 STOP
消息,这会导致服务器取消订阅所有频道,从而停止为请求提供服务。
然而,由于 API A 和 API B 都在使用此频道,停止其中一个最终会停止另一个。
是否应该为每个 RedisMqServer
实例使用一个 Redis 服务器实例?
值得注意的是,每个 API 在任何时间点都只连接到一个 Redis 服务器。仅当主服务器不可用时才连接到从服务器。
这是 v3 中 Redis MQ 的行为,但 v4 中最新的 RedisMqServer
会按预期工作,只会停止已处置的 RedisMqServer
个实例。
我们遇到了 RedisMqServer
的多个实例相互绊倒的问题 - 停止一个服务器会停止其他服务器。显然我们实现的方式是错误的,但我无法确定在这种情况下应该如何使用 RedisMqServer
。
我们的基础设施包括:
- master/slave 配置中的两个 Redis 服务器
- 两个负载平衡的 API 实例(以下称为 'API A')
- 两个负载平衡的 API 实例(以下称为 'API B')
API A 和 B 是两个独立的应用程序,它们使用 ServiceStack.Redis 的 RedisMqServer
相互发送同步和异步消息。我们正在使用 ServiceStack 的开源 v3 修订版。
两个 API 都配置了 RedisMqServer
,因为异步通信发生在两个方向。
处理 RedisMqServer
时,它会在 mq:topic:in
频道上发送 STOP
消息,这会导致服务器取消订阅所有频道,从而停止为请求提供服务。
然而,由于 API A 和 API B 都在使用此频道,停止其中一个最终会停止另一个。
是否应该为每个 RedisMqServer
实例使用一个 Redis 服务器实例?
值得注意的是,每个 API 在任何时间点都只连接到一个 Redis 服务器。仅当主服务器不可用时才连接到从服务器。
这是 v3 中 Redis MQ 的行为,但 v4 中最新的 RedisMqServer
会按预期工作,只会停止已处置的 RedisMqServer
个实例。