我的问题更多的是结构性而非程序性,但我认为这符合S.O的条款和条件。
我们有一个负责发送大量电子邮件的应用程序。 该体系结构如下所示:
这时,第二步由MassTransit处理程序执行:
这是必需的,因为在第一步中,将创建一个电子邮件模板,该模板可能会生成30'000封电子邮件。对于每封电子邮件,都会将特定的邮件发送到RabbitMQ,然后单独发送该电子邮件。
我们需要的是模板以及模板发送的所有电子邮件的历史记录。因为我们的平台发送了数百万封电子邮件(仅内部电子邮件),所以我们担心将其存储到SQL Server中,所以我想知道是否有任何方法可以查询RabbitMQ来获取生成和处理的消息的历史记录,或者如果有更好的方法可以达到目的。
答案 0 :(得分:1)
RabbitMQ不保留消息的历史记录,一旦发送和使用它们,该消息的所有残余都将被删除。而且也不应该。
如果您需要维护历史记录以进行审核,甚至用于跟踪(例如电子邮件打开的回调或取消订阅链接等),则可以使用任何类型的数据库来跟踪标识符,目的地,发送日期和还有其他必要的。我不建议使用SQL Server,但如果您已经拥有SQL Server,则可以设置一个按日期时间分区的相当窄的表,并在不再希望保留较旧的记录时(例如3个月后)删除旧的文件组。您可以使用任何数据存储,这仅取决于您的团队在生产中能够支持哪些功能。添加新技术可能不是最佳或可管理的。
您可能会产生一个电子邮件发送后事件,即一个单独的使用者(或给定数量的批量使用者)将消耗并写入与邮件发件人不同的审核数据库。