gpt4 book ai didi

c# - 关闭 RabbitMQ 连接,即使应用程序没有正常结束

转载 作者:太空狗 更新时间:2023-10-29 23:24:40 26 4
gpt4 key购买 nike

我将 RabbitMQ.Client(运行时版本 v2.0.50727,版本 2.8.1.0)与 C# .NET 应用程序一起使用。

我这样创建连接:

using (IConnection connection = _factory.CreateConnection())
{
using (IModel channel = connection.CreateModel())
{
// code...
}
}

如果我正确关闭应用程序,它只会关闭 channel 和连接。但如果应用程序关闭不正确(例如在 PC 上按重启按钮),则不会。我想确保在启动我的应用程序之前关闭所有不必要的连接(来自以前的 session 或什至其他应用程序,如果应用程序的其他实例错误地在其他地方运行)。

我知道我可能会使用心跳,但我的应用程序可能需要很长时间才能开始做任何事情(许多小时的打开连接但未被使用)。所以我认为心跳不是最好的东西。

如何为 RMQ 关闭所有打开的连接? (或者,更好的是,所有打开的连接,给定 IP 除外)?

问候!

最佳答案

我遇到了和你一样的问题。我尝试了很多方法来关闭这些连接。

那些方法,有些是有效的,有些只是部分有效。也许你可以试试。

  1. 使用rabbitmqctl 命令删除队列,然后使用RMQ 的管理网站关闭连接。这意味着当前打开的队列将在 1 秒(1000 毫秒)后过期。这样所有队列都被删除了。然后您可以关闭连接。

    命令:

    rabbitmqctl set_policy expiry ".*" '{"expires":1000}' --apply-to queues

    队列生存时间策略--> https://www.rabbitmq.com/ttl.html

    此方法部分有效。

  2. 经过查找,认为原因可能是:

    您的生产者等待返回 ACK,直到您发送 ACK 确认作业已完成,它才会被销毁。

  3. 突然的方式。作品。 RMQ 在其 DB 菜单中保存连接信息。

    Step1: 先停止rabbitmq-server,通过'ps aux | kill rabbitmq thread grep rabbitmq' 找到它的 pid 然后杀死所有 rabbitmq 线程。

    查找 RMQ DB 菜单位置(1). $> cd/var/lib/rabbitmq/

    Step2: 将 mensia 文件重命名为另一个名称以“删除”(2). $> mv mensia mensia-bak

    第三步:重启rabbitmq-server

    第三种方法现在对我有用。它可以关闭所有打开的连接。

关于c# - 关闭 RabbitMQ 连接,即使应用程序没有正常结束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13291264/

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