gpt4 book ai didi

c# - 为什么使用 PUBSUB 订阅时无法 PING 通?

转载 作者:可可西里 更新时间:2023-11-01 11:12:05 27 4
gpt4 key购买 nike

我在 Azure 上使用 PUBSUB 时遇到问题。

Azure 防火墙将关闭闲置任意时间的连接。对于时间长度存在很多争议,但人们认为大约是 5 - 15 分钟。

我使用 Redis 作为消息队列。为此,ServiceStack.Redis 库提供了一个订阅以下 channel 的 RedisMqServer:

mq:topic:in

在后台线程上,它会阻止从套接字接收数据,等待从 Redis 接收消息。问题是:

If the socket waiting on a Redis message is idle for any length of time the Azure firewall closes the connection silently. My application is not aware as it is now waiting on a closed connection (which as far as its concerned is open). The background thread is effectively hung.

我曾想过实现某种“保持事件”状态,即等待消息一分钟,但如果没有收到消息,则对服务器进行 PING 操作有两个目标:

  1. 通过告诉 Azure 此连接处于打开状态来保持连接打开仍在使用。
  2. 检查连接是否已关闭,如果是重新开始并重新订阅。

但是,当我实现此操作时,我发现我在订阅时无法使用 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 节点出现故障)而被终止,我仍然需要实现重新启动订阅的第二个目标。

最佳答案

我刚刚在此提交中的 Redis 不稳定分支中以 Pub/Sub 模式实现了 PING 支持:https://github.com/antirez/redis/commit/27839e5ecb562d9b79e740e2e20f7a6db7270a66

这将在接下来的几天内向后移植到 Redis 2.8 稳定版中。

关于c# - 为什么使用 PUBSUB 订阅时无法 PING 通?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24782549/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com