问题标签 [symfony-messenger]
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.
php - 如何使用 Symfony 的 Messenger 组件和 Enqueue 适配器使用来自 Cloud Pub/Sub 的消息?
我正在使用的工具:
- Symfony 4.1.6
- Symfony Messenger 组件4.1.6
- 入队适配器0.1.2
- Enqueue Google Cloud Pub/Sub Transport 0.8.37
我的配置文件:
.
将消息/命令发送到 Cloud Pub/Sub 队列 OK
我的消息/命令CreateStore
已正确发送到 Cloud Pub/Sub,如下所示:
所有消息/命令都在我的 Cloud Pub/Sub 队列中,我可以看到它们并通过 gcloud 命令行工具手动确认它们,如下所示:
gcloud pubsub subscriptions pull enqueue.commands
gcloud pubsub subscriptions pull enqueue.commands --auto-ack
使用来自 Cloud Pub/Sub 队列的消息 KO
现在我尝试通过运行来使用我的消息:
bin/console messenger:consume-messages enqueue
消费者运行,但没有发生任何事情。
在使用 Cloud Pub/Sub 上可用的消息时,我缺少什么?
symfony - Symfony Messenger / RabbitMQ 中的消费者错误处理
我正在使用新的Symfony Messenger Component 4.1 和RabbitMQ 3.6.10-1 从我的 Symfony 4.1 Web 应用程序中排队和异步发送电子邮件和 SMS 通知。我的 Messenger 配置 ( messenger.yaml
) 如下所示:
当要发送新通知时,我将其排队如下:
然后我在命令行上像这样启动消费者:
我已经实现了SendNotificationHandler
实际交付发生的服务。服务配置:
和班级:
到此为止,一切顺利,通知已送达。
现在我的问题是:由于(临时)网络故障,电子邮件或 SMS 可能无法发送。在这种情况下,我希望我的系统在指定的时间后重试交付,最多达到指定的最大重试次数。实现这一目标的方法是什么?
我已经阅读了关于Dead Letter Exchanges的文章,但是,我找不到任何关于如何将其与 Symfony Messenger 组件集成的文档或示例。
symfony - Symfony Worker - 消费消息 - EntityManager
我将 Symfony 4 与 messenger 一起使用,并使用一个将我的消息作为一个长时间运行的进程来使用的工作人员。
如果我删除我的帖子并重新创建一个新帖子并发送我的消息,我就会遇到教义错误。$post 有旧数据而不是新数据。
我已经尝试了很多东西,但没有任何效果,当我重新启动我的工作人员时它就可以工作。
我的 MessageHandler 调用服务:
多谢
php - 单元测试 Symfony Messenger
在我的最新项目中,我一直在使用 Symfony Messenger 实现 AMQP。虽然代码让我非常高兴,但我无法为发送消息的方法编写单元测试。
我所有涉及发送消息的代码的测试都会导致以下警告:
我无法在 Symfony 的网站上找到有关 Symfony Messenger 测试的文档。
如何使用涉及消息的单元测试来测试我的代码?
班级:
测试文件:
php - Symfony messenger 不能消费消息
几周前,我用 Symfony Messenger 建立了一个消息系统,效果很好。
今天想通过message创建新对象,所以我去我的服务器输入命令来消费message
首先我有这个结果
我的文件以前从未发生过这种情况,而且我从未更改过 PHPstorm 文件的行尾或编码。
我尝试使用$ php bin/console messenger:consume-messages amqp_notifications
,但后来我遇到了这个错误。
很奇怪,因为我已经安装了 php-amqp ext,正如您在我的 phpinfo 的屏幕截图中看到的那样
我没有更改我的消息类或处理程序中的任何内容。
另外,我试图调用new AMQPConnection()
一个随机动作,只是为了尝试,但我没有收到错误。
这次我完全迷失了这个错误,因为一切都已安装。
我使用 PHP 7.3.1 和 symfony Messenger 4.2.2
php - Symfony 4 amqp/messenger 生成pdf
我需要发送一封附有 PDF 的电子邮件。使用 SnappyBundle 和 Swift Mailer,所有这些都非常简单。每当调用../document_name/{id}/mail
pdf 并发送电子邮件时。
为了尝试让用户 exp 更好一点,我决定用 RabbitMQ 实现 Messenger 组件来排队这个动作。但此时 Snappy 的情况有点崩溃。这是我得到的错误:
- 生成 pdf 然后发送它的服务只要不被
messenger:consume_messages
. - 为了让 Swift Mailer 在我发送电子邮件时尽快发送电子邮件
$msg->send();
并且不将其假脱机,我将其注释掉,# spool: { type: 'memory' }
否则在运行服务swiftmailer.yml
时不会发送电子邮件。messenger:consume_messages
php - 来自 Messenger 处理程序的自定义异常
我尝试使用 Symfony 4.3.0-dev 版本从 Messenger 组件中获取一些新功能。我的命令总线在同步模式下工作。
在升级之前,我可以轻松地ConflictException
从处理程序中抛出我的自定义异常。但是对于 4.3.0-dev 我得到一个Symfony\Component\Messenger\Exception\HandlerFailedException
.
如何再次捕获我的自定义异常?
symfony - 使用 Messenger 阅读未使用 Messenger 发送的排队消息
我正在尝试读取未使用 Symfony Messenger 发送的排队消息(在 RabbitMQ 中)。Messenger似乎添加了一些标题,例如
但是在读取外部消息时,此标头不存在。
那么,有没有办法告诉 Messenger 队列 A 中的每条消息都必须被视为消息类型Transaction
?
我今天拥有的是:
我想补充的是:
symfony - 如何在 Kubernetes 上最好地运行 Symfony Messenger Worker
messenger:consume
在 Kubernetes 上运行任务的最佳方式是什么?
部署?
如果我们使用具有一定数量副本的部署来做到这一点,这可能会起作用,但是如果我们对部署进行滚动更新,然后导致一个 pod 被替换,尽管它现在处理了一个长时间运行的消息呢?
为了防止这种情况,我们可能会设置一个高点terminationGracePeriodSeconds
并lifecycle.preStop
结合使用?
但是在我的测试过程中,即使lifecycle.preStop
任务提前停止,由定义的完整时间terminationGracePeriodSeconds
仍然会等到 Pod 终止。
有人有好主意吗?
symfony - Symfony Messenger 4.3 - 从理论传输中消费消息失败(抛出异常)
Symfony 版本:4.3.2
PHP:7.2.20
我正在尝试将信使组件与学说传输异步使用。我在composer require messenger
Symfony Flex 的帮助下安装了 Messenger。
我已经MESSENGER_TRANSPORT_DSN=doctrine://default
在.env.local
. 在 messenger 配置中,传输也被配置:
在控制器中发送消息时,$this->dispatchMessage(new SomeNotification('some content'));
一切都很好。教义传输表messenger_messages
自动创建,消息正确保存在表中。
当尝试使用消息时,./bin/console messenger:consume async
我收到以下错误:
所以里面的 $routeableBusSymfony\Component\Messenger\Command\ConsumeMessagesCommand
是空的,这会导致在实例化 Worker 时崩溃。