问题描述
您将实施哪种设置
- 每个目标一个队列
- 每种消息类型的队列
一些关于我的设置的信息:
- 生产者是宏观服务(它们向扇出交换产生消息(不同的tyoes))
- 消费者也是宏服务(Java App或ETL-App),并负责绑定/路由
- 一个生产者和一个消费者实际上拥有多达3个API(将来,API数量可能会增加,最多有10个API(每个Poducer x Consumer)
- 请注意,该项目有8个Macroservice,可以是生产者和消费者。
解决方法
职位A-发送电子邮件: 消费者是向目标发送电子邮件的电子邮件服务
作业B-写入数据库: 消费者B更新给定模型中的数据
一切正常时,就像往常一样。
混乱情况:邮件服务错误(无论何种原因)
- 每个目标的队列(FIFO): 电子邮件服务错误,邮件停留在队列中, 您无法更新数据库,因为电子邮件卡住了
解决方案死信队列,在x重试移至死队列后卡住。 以前的消息将会继续
- 每种消息类型的队列: 电子邮件服务错误,电子邮件信息被卡住, 数据库照常更新 只有电子邮件失败
考虑该工作案例,以帮助您做出更多的弹性选择
是的,“每个目的地都有一个队列”,更少的代码,更易于扩展工作人员... 但是如果有问题... 此解决方案将很快完成(但从死信队列开始) (以下为代码,更少要做)
“每种消息类型的队列”将减少失败 “每种消息类型的队列”一开始需要做更多的工作,但会减少 随时间进行维护/手动工作 并且代码库对于下一个开发人员将更容易理解 (以下为代码,还有更多工作要做)
完成思考错误的情况