PHP断开连接rabbitmq,PHP 解决RabbitMQ消费者自动掉线问题

f13f565b3136973d3931da686ab7788e.png

在cmd下运行php使用rabbitmq获取服务器消息消费时,碰到队列在运行几分钟之后卡死的状况,

之后再怎么向服务器发送消息,消费者都没有反应,

抓了一次数据包来查看,下图是消费者消费消息的,端口55155:

f9d9f24cc95a704a415bb7a63b663a50.png

8744fb0047a68f3951bf565d1dc4730d.png

后来知道零值表示对等​​方(消费者)建议完全禁用心跳。

代码中默认是0:

c78ac6595b9b379a4ca6a34942be202d.png

后来重新抓了一次包,端口60351,队列里没有消息的时候,

b853309576eed1451576848c0414df34.png

后来看到它在进行心跳包检测:

e21cc3c2f92c317c6e92b9219543389f.png

最后主动断开了和消费者的连接

启动消费者的时候,在rabbitmq后台看到:

114c5bf9ba2da5865795178cbbeab9de.png

最后解决方法:

8c20394efa9ee4c2dccd34f47173acc6.png

53507ed0eca0988ce0d7369f88b96eea.png

更多资料:

https://www.rabbitmq.com/heartbeats.html

https://blog.csdn.net/jiao_fuyou/article/details/23186407

https://www.jianshu.com/p/59247da47db4

http://www.nowamagic.net/academy/detail/23350382

在C#中,消费者消费RabbitMQ消息的过程通常涉及到使用RabbitMQ.Client这个库。RabbitMQ.Client提供了.NET环境下与RabbitMQ服务器交互的API。一个消费者读取消息后可能会断开连接的原因可能是为了节省资源或者根据特定的应用逻辑。下面是一个简化的示例,介绍如何使用RabbitMQ.Client在C#中创建消费者、接收消息,并在读取消息后关闭连接。 ```csharp using RabbitMQ.Client; using RabbitMQ.Client.Events; using System; class Program { static void Main() { // 创建连接工厂,设置RabbitMQ服务器的地址 var factory = new ConnectionFactory() { HostName = "localhost" }; // 创建连接,并且打开连接到RabbitMQ服务器 using (var connection = factory.CreateConnection()) using (var channel = connection.CreateModel()) { // 声明队列,如果队列不存在则创建 channel.QueueDeclare(queue: "hello", durable: false, exclusive: false, autoDelete: false, arguments: null); // 创建消费者 var consumer = new EventingBasicConsumer(channel); // 接收消息的回调函数 consumer.Received += (model, ea) => { var body = ea.Body.ToArray(); var message = System.Text.Encoding.UTF8.GetString(body); Console.WriteLine(" [x] Received {0}", message); // 执行完业务逻辑后,关闭连接 channel.Close(); connection.Close(); }; // 开始接收消息 channel.BasicConsume(queue: "hello", autoAck: true, consumer: consumer); // 阻塞主线程,防止程序退出 Console.WriteLine(" Press [enter] to exit."); Console.ReadLine(); } } } ``` 在这个例子中,我们首先创建了连接工厂,并指定了RabbitMQ服务器的地址。然后,我们创建了一个连接,并从这个连接中打开一个通道。我们声明了一个队列,并创建了一个消费者来监听这个队列的消息。当消费者接收到消息时,它会处理消息并打印到控制台,然后关闭通道和连接。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值