当前位置: 首页 > 知识库问答 >
问题:

rabbitMQ无法使用php amqplib获取心跳信号

陆宏壮
2023-03-14

我观察到RabbitMQ被未确认的消息“卡住”。队列显示了一个不再存在的使用者,我假设发生的是RabbitMQ正在继续向该使用者传递消息。它们表现为未确认消息的数量不断增加。我用PHP和PHP amqplib来做这件事。

我可以通过杀死消费者进程(命令行上的Control-C)来产生问题。

我尝试指定3秒的心跳,并尝试保持活动状态(true和false)。使用heartbeat,消费者最终将失败:

Exception fwrite(): send of 573 bytes failed with errno=32 Broken pipe
PhpAmqpLib\Wire\IO\StreamIO->error_handler(8, 'fwrite(): send ...',
php-amqplib/PhpAmqpLib/Wire/IO/StreamIO.php(281): fwrite(Resource id #176, '\x01\x00\x01\x00\x00\x00\x15\x00<\x00(\x00\x00\fb...', 8192)

问题374可能涉及:https://github.com/php-amqplib/php-amqplib/issues/374

消费者在多个队列中消费,但我认为这不重要。

我试图解决的问题是RabbitMQ继续认为消费者存在,而消费者不存在,结果RabbitMQ将这些消息传递到任何地方,并且它们不被承认。我正在寻找一种方法来摆脱这种虚假的连接,以便这些消息可以重新传递给实时消费者。我想这就是心跳的作用,但我还没有让它发挥作用。

共有1个答案

莘光华
2023-03-14

在这种情况下,我们需要做的第一个也是更重要的想法是尝试“打印”你的内容信息,并且只向消费者返回真实。不要处理你真正的代码,如果你可以“消费”消息,问题不在兔子身上,而是在我们的过程中,因为可能我们花了很多时间向兔子确认消息,兔子关闭了我们的连接。

我不是说这是你的情况,但我只是想帮助调试这个问题。

在我的例子中,我改变了解决这个问题的方法,因为我有很多产品ID(我的例子)用于每个消息,并且它花费了很长的时间来确认过程,因为它们到达数据库,我对我的消息进行了调整,然后它就可以正常工作了。

我们可以改变方法,比如创建另一个队列来适应这些消息,我不知道,但90%的问题都是这样。

你可以在这里阅读更多关于用心跳检测死TCP连接的信息

 类似资料:
  • 我正在创建一个Spring MessageListenerAdapter,用于侦听XML消息队列。 这是我的amqp配置: 当前,消息的接收工作正常,但仅当我的侦听器的返回类型是字符串时。 通过以下侦听器,我可以接收XML消息,所以这很好。但我无法获取原始消息的消息属性: 如果我将receiveMessage()的返回类型更改为字节[]或消息,则会收到以下错误消息: 我已经尝试过MessageCo

  • 我们使用nextjs/reactjs作为FE,并且我们有一个server.js文件,它允许我们在上传映像,但是由于某种原因,每当我们运行服务器时,都会出现错误 下面是我们在server.js上的代码 这些是我们package.json中包含的脚本 希望得到一些答案和建议。这些代码在本地运行,没有任何问题

  • 问题内容: 我是一个新用户,正在尝试此命令。 我得到这个错误 我知道这似乎是一个琐碎的问题,但我坚持下去。 问题答案: 如果编译和安装的代码是 不是 在分支(签出由默认值),但只有在该回购的分支,尝试: 然后重试编译。

  • 我是新来的和学习它我想从Imdb站点/特定的电影链接提取评级,并发现我将能够从div与class=,因此我写了以下内容代码: 很奇怪,我没有得到任何数据,因为我能够在几周前得到评级数据。是div与class=存在于页面/url上。

  • 嵌入式设备上,只能运行SRS时,其他的业务系统可能需要知道这个设备的ip等信息,SRS可以以http方式主动汇报给api服务器。 编译 要求编译时支持http-parser,即开启了下面任何一个选项即支持: --with-http-api HTTP接口。 --with-http-server HTTP服务器。 --with-http-callback HTTP回调。 配置 在全局配置以下信息即可以

  • 我已经在VPS DebianLinux上安装了最新版本的RabbitMQ。试图通过访客/访客登录,但返回消息登录失败。我做了一点研究,发现出于安全原因,禁止通过访客/访客远程登录。 我还尝试通过创建rabbitmq来远程登录此版本上的来宾使用。手动配置文件(因为安装没有创建文件),并仅放置以下条目 使用以下命令重新启动rabbitmq之后。 它仍然没有让我用访客/访客登录。我也尝试过在视窗VPS上