我目前正在使用symfony Messenger Bus异步处理报告生成任务.它将首先查询数据库,然后为需要生成的每个报告创建一条新消息.目前,每条消息都是单独处理的,在发送邮箱报告之前,可能需要长达90秒的时间来生成和处理.

我现在要做的不是 for each 正在运行的报告发送单独的邮箱,而是简单地生成一封邮箱并附加每个生成的报告.报告文件的大小相对较小,但生成报告本身所需的后端工作既耗时又耗费内存.

有没有办法单独处理每一份报告,但在它们全部生成后,以某种方式发送一封合并的邮箱,并附上所有报告?

目前,我每次都只是发送单独的邮箱.我目前唯一能想到的就是在内存(Redis)或数据库中保存某种类型的计数器,用来跟踪记录的总数,但由于存在报告(在运行后)不会产生输出的情况,我们可能会在公交车上发送30条消息,但只生成29个实际报告,但我们仍然需要有人运行合并的邮箱.

推荐答案

Processing Reports and Sending Combined Emails using Symfony Messenger

引言

是否要处理报告并与其一起发送合并邮箱?使用Symfony Messenger、数据库和Redis.以下是一份指南:

步骤:

1. Message Details:

  • 为每条报告消息指定一个名为correlationId.的唯一ID

2. Database Setup:

  • 有一个地方(像一个桌子)来跟踪批次.
  • 包括correlationId,个报告的详细信息,以及哪些有效,哪些无效.

3. Processing 步骤:

  • 发送报告消息并计算每个批次中的数量.
  • 当报告被处理时,记录它是否起作用.

4. Check If Done:

  • 看看起作用和不起作用的报告是否等于总数.如果是这样的话,这一批就完成了.使用Redis可以顺利地完成此操作.

5. Email 步骤:

  • 批处理完成后,获取所有报告并在一封邮箱中发送它们.
  • 另外,也要提到那些不起作用的.

6. Cleanup:

  • 偶尔判断有无卡住的批次,并加以处理.

需要考虑的几点:

  • 如果报告不起作用怎么办?我应该继续还是停止?
  • 如果报告失败,对用户来说最好的是什么?
  • 如果一开始不起作用,请再次try 报告.

Php相关问答推荐

按制造商、型号和年份范围判断数据的存在性

PHP FFI—将PHP数组转换为C指针数组

有什么方法可以阻止WordPress主题升级通知吗?

保存PHP条带以备将来使用,不显示用户界面

PHP中冒号的奇怪用例

ForHumans函数中的月当量与单位限制

是否重新排序多维数组元素以将所有子数组中的子数组移动到元素列表的底部?

FlySystem v3:使用本地适配器时出现问题

无法在Laravel中将日志(log)通道设置为空

在WooCommerce上设置简单和可变产品的最小订单量

是否有条件判断是否发布了另一个Wordpress页面?

如何使用PHP从TXM(XML)标记中读取特定属性

Woocommerce 仅在前端为登录用户提供价格折扣

woocommerce checkout 页面上的自定义字段

使用 Composer 找不到 Google APIClient 类

WooCommerce – 在新订单邮箱通知中显示产品分类计数

带有 nginx 的 Symfony 不提供 .js 和 .css 文件

标头内容类型:image/jpeg 无效

Laravel 自定义中间件:ERR_TOO_MANY_REDIRECTS

服务器发送的事件:EventSource 抛出 MIME 错误