收件箱模式和发件箱模式

问题描述 投票:0回答:1

我没有看到收件箱模式和发件箱模式之间的区别。

收件箱模式将消息保存在数据库中。发件箱模式也是如此,那么有什么区别呢?

messagebroker outbox-pattern
1个回答
0
投票

其实这是一个很好的问题。

我们应该考虑一些差异。首先,我们有 3 种传递消息的方法:

  1. 最多一次 - 您最多交付 1 次
  2. 至少一次 - 您至少发送一次消息
  3. 正是一个

发件箱模式和收件箱模式描述了“至少一次”策略。让我们看一下真实的例子,当你有 API-1、消息代理和 API-2 时,即两个带有消息代理的微服务。

  1. 请求来自 API-one
  2. 您的业务逻辑开始工作,可能会以类似的方式结束:
  • 将实体保存到数据库,保存后,将事件发送到代理。

这里有什么问题吗?如果实体将被保存到数据库,并且出于某种原因,但在发送事件之前,您的 api 将死亡,API-2 将不会收到有关该操作的通知,并且您的数据将不一致。

发件箱图案:

  1. 请求到达 API-one
  2. 业务逻辑正在进行中
  3. 您来到结束部分,您在一个事务中将实体和事件保存到数据库,但保存到 API-one 微服务中的数据库。然后一些后台作业或其他作业将查找 API-one DB 并检查事件表。它将获取该事件并推送给经纪人。然后经纪人最终将向您发送交易确认,您的工作将从事件表中删除此事件。
  4. 同时 API-2 监听代理,如果消息将传递到 API-2,它将继续自己的业务逻辑。

收件箱图案

收件箱模式情况略有不同,但非常相似

  1. API-one 将事件发布到 BUS
  2. API-two 接收事件并将其保存到 API-two DB
  3. 然后有些工作例如每 5 秒查找一次 API-两个数据库事件表并处理每个事件

总结一下—— 发件箱模式 - 将事件存储到 API-one 的数据库中 收件箱模式 - 您将事件存储到 API-two 的数据库中

主要区别在于发件箱用于结果,收入用于处理传入消息

© www.soinside.com 2019 - 2024. All rights reserved.