symfony 如何在消息总线中批处理消息

0sgqnhkj  于 2023-10-24  发布在  其他
关注(0)|答案(1)|浏览(102)

我目前正在使用symfony信使总线来快速处理一个报告生成任务。它将首先查询数据库,然后为需要生成的每个报告生成一个新消息。目前每个消息都是单独处理的,在发送电子邮件报告之前,生成和处理可能需要90秒。
我现在要做的不是为每个运行的报告发送一封离散的电子邮件,而是简单地生成一封电子邮件并附上生成的每个报告。报告文件的大小相对较小,但生成报告本身所需的后端工作既耗时又占用内存。
有没有一种方法可以单独处理每个报告,但在它们全部生成后,以某种方式发送一封附有所有报告的合并电子邮件?
目前,我只是每次发送单独的电子邮件。我目前唯一能想到的是在内存(Redis)或数据库中保存某种计数器,它可以跟踪记录的总数,但由于存在报告(运行后)将导致没有输出,我们可能会在总线上发送30条消息,但只生成29个实际报告的情况下结束,但我们还是需要有人去查合并邮件

eblbsuwk

eblbsuwk1#

使用Symfony Messenger处理报表和发送组合邮件

简介:
你想处理报告并发送一封合并的电子邮件吗?使用Symfony Messenger,一个数据库和Redis。这里有一个指南:

步骤:

1.消息内容:

  • 为每个报告消息给予一个名为correlationId.的唯一ID

2.数据库设置:

  • 有一个地方(如表)来跟踪批次。
  • 包括详细信息,如correlationId,报告的数量,以及那些工作和那些没有。

3.处理步骤:

  • 发送报告消息并计算每批中有多少。
  • 当一份报告被处理时,记录它是否有效。

4.检查是否完成:

  • 看看是否有工作的报告和不等于总数。如果是这样,那一批就完成了。使用Redis来顺利完成这一任务。

5.邮件发送步骤:

  • 一旦一个批次完成,获得所有的报告,并在一个电子邮件中发送它们。
  • 另外,提到那些没有工作的。

6.配置:

  • 偶尔检查卡住的批次并处理它们。

注意事项:

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

相关问题