问题标签 [php-amqplib]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
7337 浏览

php - Codeigniter 3 作曲家和供应商目录

我已经安装了 codeigniter 3.1.8 并使用 composer安装了这个库https://github.com/php-amqplib/php-amqplib :

composer require php-amqplib/php-amqplib

这已经创建了一个目录供应商在此处输入图像描述

我已经在此处查看了有关如何使用库的公认答案如何在 codeigniter 中使用作曲家包?

但这是我在供应商中的目录结构。

在此处输入图像描述

第二

和里面 php-amqplib

在此处输入图像描述

和里面 php-amqplib

在此处输入图像描述

如果我看一下,index.php我发现 fcpath 已经被定义了

并再次定义它会导致错误。我怎样才能在我的控制器方法中使用 php-amqplib?

0 投票
1 回答
1869 浏览

php - php-amqplib 连接错误

我只是在做一个测试,试图让 RabbitMQ 与php-amqplib. 我刚刚编辑了这个问题,以便它使用正确的端口。对此有什么想法吗?

这是我的PHP文件...

这是我的 .env ...

这是composer.json ...

这是我得到的错误...

0 投票
0 回答
44 浏览

php - 如果我为我的消息设置附加属性,队列中没有消息

我正在symfony 3.4使用RMQ 3.6.14. 我正在处理其他属性,但令人惊讶的是,消息从未到达RMQ服务器。

我到处都放了一些调试点,但我无法解释。我正在使用php-amqlib 2.7.2.

如果我做 :

没问题,我可以看到我的消息,

但既然我这样做了:

我在我的队列中看不到它:( 注意:我配置了一个交换器来根据路由键将我的消息路由到不同的队列。

任何想法 ?我坚持下去。

祝你今天过得愉快,

格雷格

0 投票
0 回答
254 浏览

php - 使用 RabbitMQ 具有回退功能的独家批处理

我通过 AMQPLib 和 RabbitMQ Bundle(用于 Symfony)在 PHP 中使用 RabbitMQ。

消费者在多台服务器上工作,这就是 Rabbit 的用途,这很好。但是,我遇到了一个特定情况,我想分批阅读消息,并且我希望只有一个消费者同时工作。但为了实现高可用性,我希望其他消费者(来自其他服务器)作为后备。

我的理解是:

  • 有一个批量消费选项,但正如我注意到的那样,它并不能保证我连续收到一批消息。
  • Rabbit 消费命令上有exclusive标志——不幸的是,Rabbit 包没有公开它;此外,如果队列中有一个独占消费者,则另一个退出并出现我无法使用 BatchConsumerInterface 处理的异常

我错过了什么吗?是否有一些内置的解决方案可以让我实现我上面描述的内容?无需编写绕过 RabbitMQ Bundle 的复杂解决方案?

0 投票
2 回答
1421 浏览

php - 如何从 RabbitMQ 向浏览器返回响应

我正在尝试通过将复杂的数据库任务发送到 RabbitMQ 队列以供工作人员测功机处理来简化我的应用程序以减少服务器负载。

对于INSERTs 和UPDATEs,这相对简单。但是,我有几个密集SELECT的 s 要发送到队列中。然而,我遇到的问题是如何在用户浏览器准备好时返回响应。

我知道我应该将响应发送到第二个队列,并在客户端的浏览器中创建一个消费者。但是,我在执行此操作时遇到了一些实际问题,例如如何从队列中选择正确的响应,而不是简单地选择下一个响应(例如,如果两个人同时在页面上)。

有没有人有任何经验或建议?

谢谢

0 投票
1 回答
1557 浏览

php - php-amqplib 和 RabbitMQ 的死字?

我刚刚开始使用 php-amqplib 和 RabbitMQ,并且想要一种方法来处理无论出于何种原因无法处理且无法处理的消息。我认为人们处理这个问题的一种方法是使用死信队列。我正在尝试设置它,但到目前为止还没有任何运气,希望有人可以提供一些建议。

我的队列启动看起来有点像:

我认为应该设置我的死信交换和队列,然后还设置我的常规交换和队列(使用扩展类提供的 getRouteKey、getQueueName 和 getExchangeName/Type 方法)

当我尝试处理如下消息时:

但我得到了错误Something went wrong: Cannot connect to the RabbitMQ service: PRECONDITION_FAILED - inequivalent arg 'x-dead-letter-exchange' for queue 'delay_queue' in vhost '/': received 'dead_letter' but current is ''

这是我应该设置死字的方式吗?我看到的不同示例似乎都显示了一些不同的处理方式,但似乎都不适合我。所以我显然在这里误解了一些东西,我很感激任何建议。:)

0 投票
0 回答
155 浏览

php - 异常:StreamIO /var/www/html/vendor/php-amqplib/php-amqplib/PhpAmqpLib/Wire/IO/StreamIO.php 252 中检测到太多读取尝试

例外:在 StreamIO /var/www/html/vendor/php-amqplib/php-amqplib/PhpAmqpLib/Wire/IO/StreamIO.php 中检测到太多读取尝试

0 投票
1 回答
328 浏览

php - php-amqplib - 致命错误:调用资源上的成员函数 basic_get()

使用队列系统处理作业。我们每天凌晨 1 点运行一次 cron,它会发布我们所有需要的 API 调用。我们有另一个消费者 cron 每五分钟运行一次,用于处理队列中的请求。

我们处于共享环境中,通过 cron 调用的脚本会在 15 分钟后终止。因此,为了保护自己,我们在 9 分钟后优雅地终止了我们的脚本。

除了 (2) 之外,我们几乎所有的 API 调用都在运行,我们正试图找出原因。当我们通过相同的脚本手动运行它们时,它们可以完美运行。奇怪的。只有通过 cron 与所有其他请求一起运行时才会失败。

在任何情况下,夜间日志都会多次显示以下致命错误。也许这就是罪魁祸首。无法确定是什么原因造成的。如果我手动终止 AMQP 连接,我会得到一个不同的错误,所以我知道 $ch 和 $conn 在其中一个 API 调用中没有被覆盖。

致命错误:在第 116 行的 /......../consume_requests.php 中的资源上调用成员函数 basic_get()

下面是我们对phpamqplib的初始化。任何帮助,将不胜感激。

0 投票
1 回答
514 浏览

rabbitmq - 在 rabbitmq RPC 模型中处理异常 - PHP

我有一个发布者和消费者(RPC 模型),它们每个都在不同的节点上运行。发布者将消息发布到特定队列,消费者侦听同一队列。消费者处理消息时,应用程序本身抛出异常,如提供的无效参数或任何其他类型的异常。

如何处理此异常并以异常消息响应发布者?

0 投票
1 回答
1688 浏览

php - RabbitMQ 存储消息作为交换

我试图弄清楚即使没有消费者运行,是否可以将消息存储在 RabbitMQ 交换中。

我理解(可能是错误的)要实现交换需要“持久”以及队列,并且需要使用“持久”标志发送消息

我的主要目标是将所有消息存储在交换器中,以便在无论出于何种原因没有消费者运行的情况下,当我启动一个交换器时,交换器中的所有消息都可以定向到绑定队列。我声明我的交换和队列如下:

我会很感激任何帮助(即使只是放弃这个想法并在两者之间插入一些存储)。谢谢。