问题标签 [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.
orocrm - OroCRM - 如何使用 Symfony Messenger 组件
我们使用 oro/crm 4.1.0 版本,在这个版本中核心团队开始使用 symfony 4.4.2 版本和 symfony/symfony 包(包括 symfony/messenger)。但是信使组件没有被使用。例如,没有 config/package/messenger.yml 文件,我无法将 messenger 块添加到 config.yml。也许我看错了一些东西,但是我怎样才能连接和使用这个组件呢?
php - Symfony MessageHandler 计算消息被发送的次数
我正在使用 Symfony Messenger,我想继续在处理程序中发送消息,直到它被发送多次。
我怎样才能跟踪它?
到目前为止,这是我的处理程序类的代码:
php - 如何在信封中设置事件名称和延迟时间?
我正在使用 symfony 4 + enqueue ( https://github.com/sroze/messenger-enqueue-transport + https://packagist.org/packages/enqueue/pheanstalk ) 在 beanstalk 中运行异步作业。
现在我有:
但我希望在延迟后处理这项工作。
文档让我像这样重构它:
这里的问题是我看不到在哪里放置事件的名称(article.publish
)
(基于https://github.com/sroze/messenger-enqueue-transport#setting-custom-configuration-on-your-message)
redis - 处理成功后如何删除redis流
我在 Messenger 中使用 redis 作为传输,我认为在处理流程后删除是自动的,但可惜不是。处理成功后,我不知道如何删除重复流。
我使用 symfony 4.4.latest 和 redis server 6.0
谢谢
php - symfony messenger 可以“批量”处理消息吗
我想知道,因为我在 symfony 或其他资源上找不到任何东西,如果 php 的 symfony/messenger 可以使用任何异步传输处理“批量”消息。
例如。从总线上抓取 20 条消息,处理这 20 条消息,然后确认或拒绝任何消息。
我知道 RabbitMQ 具有从队列中获取 n 条消息的功能,并在一次运行中处理所有消息。在某些情况下,这将比扩展异步工作线程具有更好的性能。
有没有人有任何线索、资源或经验?还是我试图通过违背 symfony/messenger 的想法来解决问题?
[更新]
我知道批量消息不是(异步)消息传递概念的一部分。应单独处理每条消息。但是一些消息代理已经实现了一项功能,可以从队列中“获取”X 条消息并处理它们(通过发送确认或拒绝,或其他方式)。我知道在一次迭代中处理多条消息会增加任何消费者的复杂性,但在某些情况下它会提高性能。
我已经多次使用在一次迭代中使用多个消息的概念,但从未使用 php 的 symfony/messenger。
php - 如何避免在 Symfony Messenger 中处理来自“子”类的消息?
我想我在文档中遗漏了一些东西,但问题很简单。
假设我有一条关于 class 的消息,MessageOne
并且MessageTwo
extends MessageOne
。
我也有MessageOneHandler
哪个应该处理MessageOne
:
并且MessageTwoHandler
应该只处理MessageTwo
:
问题是何时MessageTwo
调度它由MessageHandlerOne
和处理MessageHandlerTwo
。是的,由于继承,这是完全明智的,一切在逻辑上都是正确的,但是有什么“symfony”方法可以防止这种情况发生吗?
当然,我可以通过重做这些类的继承来解决这个问题,但是有没有更好的方法呢?
此外debug:messenger
,按预期显示所有内容,每个消息类一个处理程序,没有继承问题。
php - Symfony 4 Messenger 问题
我在信使组件上遇到问题,
我有两个消息类和两个处理程序,当我执行
我得到这些结果:
正如您在两个结果中看到的那样,我每次都有不同的处理程序(DeliveryMQHandler
或OrderMQHandler
),但我需要两者。
如果有人知道这是我的信使配置文件:
DeliveryMQHandler :
OrderMQHandler :
消息类太大而无法在此处显示,但它们实现得很好,我很确定它们不是问题,因为getContent()
方法结果每次都可以。
自动装配属性在 services.yml 中设置为 true 当我执行以下命令时,不同的类被很好地列出:php bin/console debug:container
最后是错误的堆栈跟踪php bin/console messenger:consume -vvv
:
编辑: 两个类的结构=> OrderMQ 类:
DeliveryMQ 类:
symfony - Symfony5 messenger,相同消息处理程序的并行队列
Symfony 信使:
https://symfony.com/doc/current/messenger.html
问题:
Pool#1 =(user1
创建一个Job
,Job
拆分为 10 个信使Message
)
Pool#2 =(user2
创建一个Job
,Job
拆分为 10 个信使Message
)
...
Pool#100 =(user100
创建一个Job
,Job
拆分为 10 个信使Message
)
Pool#100 将不会被执行,直到所有先前的 Pool 都不会完成。
目标:
我需要并行队列,所有池都将单独运行,因此每个池都有个人队列。
代码示例:
配置/包/messenger.yaml src/消息/Job.php src/MessageHandler/JobHandler.php src/Controller/JobController.php更多信息:
我想继续使用它,但找不到最简单的解决方案来传递一些唯一的队列名称或 ID,然后告诉工人他必须只处理这个 Pool of Messages
.
我找到了自定义传输https://symfony.com/doc/current/messenger/custom-transport.html,但我不确定它是否有帮助。至少我认为只有定制运输是不够的。
我阅读了有关Actor models
https://www.brianstorti.com/the-actor-model/的信息,但如果可能的话,我只想使用 Messenger+Redis。
可能这里没有解决方案,这个信使还不能处理并行队列。无论如何,我很高兴得到任何帮助。
谢谢!
php - 当第一个发生错误时,symfony messenger 中两个不同总线之间的事务分离
假设我们有以下代码:
两辆公共汽车都设置了 DoctrineTransactionMiddleware。让我们假设在处理过程中messageBus
我们坚持一些实体但发生异常 -DoctrineTransactionMiddleware
在这种情况下提供回滚事务,所以稍后我们进入上述代码中的 catch 块。一切都处理得很好,因此在eventBus
中创建的事务已eventBus
成功提交,但 entityManager 也有在此期间持久存在的实体messageBus
- 所以最后这些实体也被保存到数据库中,这是不需要的行为。
我在学说文档中读过
当使用显式事务划分并发生异常时,应立即回滚事务并通过调用 EntityManager#close() 关闭 EntityManager
DoctrineTransactionMiddleware 没有这样做——我必须在执行调度close()
之前在 catch 块中显式执行方法——然后我从. 也许我理解错了这个想法,它就像那个 OR DoctrineMiddleware 错过了执行 close() 方法。IMO DoctrineTransactionMiddleware 应该在没有开发人员干预的情况下提供这样的执行。eventBus
messageBus