【发布时间】:2014-07-16 13:48:22
【问题描述】:
我在 Azure 上使用 PUBSUB 时遇到问题。
Azure 防火墙将关闭空闲时间不限的连接。时间长度有很多争论,但人们认为大约是 5 到 15 分钟。
我使用 Redis 作为消息队列。为此,ServiceStack.Redis 库提供了一个订阅以下频道的 RedisMqServer:
mq:topic:in
在后台线程上,它阻塞从套接字接收数据,等待从 Redis 接收消息。问题是:
如果等待 Redis 消息的套接字空闲了任意时间长度,Azure 防火墙 静默关闭连接。我的应用程序不知道,因为它是 现在等待关闭的连接(就其而言 打开)。后台线程被有效挂起。
我曾想过实现某种 Keep Alive,即等待消息一分钟,但如果未收到消息,则 PING 服务器有两个目标:
- 通过告诉 Azure 这个连接是保持连接打开 仍在使用中。
- 检查连接是否已经关闭,如果是 重新开始并重新订阅。
但是,当我实现这个时,我发现我不能在订阅时使用 PING 命令??不知道为什么会这样,但有人有替代解决方案吗?
我不想定期退订和重新订阅,因为我可能会错过消息。
我已阅读以下文章:http://blogs.msdn.com/b/cie/archive/2014/02/14/connection-timeout-for-windows-azure-cloud-service-roles-web-worker.aspx,其中介绍了 Azure 负载均衡器如何在 4 分钟后断开连接。但是即使我可以保持连接处于活动状态,如果连接因其他原因(redis 节点关闭)而被终止,我仍然需要实现重新启动订阅的第二个目标。
【问题讨论】:
标签: c# azure redis servicestack.redis