我正在处理几个使用redis缓存和广播消息的azurewebjobs。每个作业连续运行(作为控制台应用程序),并且随时可能有多个示例(取决于缩放规则)。当作业启动时,它订阅redis频道以接收通知:
...
var subscriber = multiplexer.GetSubscriber();
await (subscriber.SubscribeAsync("channel", HandleMessage));
...
private void HandleMessage(RedisChannel channel, RedisValue value)
{
...
}
我们正在使用stackexchange.redis 1.2.6。
我的问题是,我无法检测示例何时关闭,因此我没有一个地方可以可靠地调用 UnsubscribeAll()
-到目前为止,我试过的方法都不管用:
appdomain.unload事件
appdomain.processexit事件
webjobsshutdownwatcher网站
到目前为止,我只做了本地测试。我不确定我是否做错了什么-关于检测webjob关闭有很多问题-我(和我所有的同事)通过使用ctrl-c或单击 X
在控制台窗口上,这样进程就被终止了—不会触发任何事件。因此,我无法在本地测试任何解决方案。不清理就让进程退出感觉不对,但我想不出任何其他解决方案。
是否有必要从redis频道取消订阅,或者干脆忘记它是安全的(或者,我上面的任何解决方案在azure中都能可靠地工作吗?)
暂无答案!
目前还没有任何答案,快来回答吧!