我正在研究多个使用Redis进行缓存和广播消息的Azure Webjob。每个作业都连续运行(作为控制台应用程序),并且随时可能有多个实例(取决于缩放规则)。作业开始时,它订阅Redis频道以接收通知:
...
var subscriber = multiplexer.GetSubscriber();
await (subscriber.SubscribeAsync("channel", HandleMessage));
...
private void HandleMessage(RedisChannel channel, RedisValue value)
{
...
}
我们正在使用StackExchange.Redis 1.2.6。
我的问题是我无法检测到实例何时关闭,因此我没有一个可以可靠地呼叫UnsubscribeAll()
的地方-到目前为止我没有尝试过:
到目前为止,我仅对此进行本地测试。我不确定自己是否做错了-有关检测到Webjob关闭的问题很多-我(和我的所有同事)通过使用Ctrl-C或单击控制台窗口上的X
来关闭本地作业因此,该过程只是被终止-不会触发任何事件。因此,我无法在本地测试任何解决方案。让进程不清理就退出是不合适的,但我想不出任何其他解决方案。
是否需要退订Redis频道,还是忘记它是安全的吗? (或者,我的上述任何解决方案都可以在Azure中可靠地工作吗?)