我们遇到了一个问题,即多个实例RedisMqServer
相互绊倒 - 停止一个服务器会停止其他服务器。显然,我们实现这一点的方式是错误的,但我无法确定RedisMqServer
在这种情况下应该如何使用。
我们的基础设施包括:
- 主/从配置中的两个 Redis 服务器
- 两个负载均衡的 API 实例(以下称为“API A”)
- 两个负载平衡的 API 实例(以下称为“API B”)
API A 和 B 是两个独立的应用程序,它们使用 ServiceStack.RedisRedisMqServer
相互发送同步和异步消息。我们正在使用 ServiceStack 的开源 v3 版本。
两个 API 都有一个RedisMqServer
配置,因为异步通信发生在两个方向。
当RedisMqServer
被释放时,它会在通道上发送一条STOP
消息mq:topic:in
,这会导致服务器取消订阅所有通道,从而停止它为请求提供服务。
但是,由于 API A 和 API B 都在使用此通道,因此停止其中一个最终会停止另一个。
是否应该为每个实例使用一个 Redis 服务器实例RedisMqServer
?
值得注意的是,每个 API 在任何时间点都只连接到单个 Redis 服务器。仅当主服务器不可用时,才连接到从服务器。