远程调用的可靠性

最近项目中需要设计一个消息服务,承接各个业务线的应用消息(对用户提醒) 其中涉及到消息的可靠投递.目前思考有两种方案可以选型.

image.png

风险点

  • 消息投递失败
  1. 消息中间件不可用.
  2. 消息中间件内部处理异常
  3. 消息中间件处理成功 返回给调用端网络超时.(事物回滚 业务逻辑回滚 消息投递成功 数据不一致)

原因1:
   调用端重试
原因2:
   调用端重试
原因3:
   回查消息中间件 或者 重试(消息中间件支持幂等)

  • 解决方案

发送事物消息.

  1. half消息发送失败 事物回滚。(消息中间件不可用. 消息中间件内部处理异常 消息中间件处理成功 返回给调用端网络超时.)
  2. half 消息发送成功 执行具体业务逻辑。
  3. 业务逻辑处理成功 发送commit消息。业务逻辑处理失败 发送rollback消息
  4. 消息中间件定时查询half消息列表,回调发送方,询问业务状态.成功 commit消息 失败 rollback消息.

事物消息 可以保证 发送端业务逻辑处理 和 消息投递成功 两边的一致性.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,991评论 19 139
  • 消息队列设计精要 消息队列已经逐渐成为企业IT系统内部通信的核心手段。它具有低耦合、可靠投递、广播、流量控制、最终...
    meng_philip123阅读 1,527评论 1 25
  • “ 消息队列已经逐渐成为企业IT系统内部通信的核心手段。它具有低耦合、可靠投递、广播、流量控制、最终一致性等一系列...
    落羽成霜丶阅读 4,045评论 1 41
  • 真正的名师拿过来哪一篇都能上
    杨仁珮001阅读 186评论 0 0
  • 简介 Qt的线性绘图控件有大名鼎鼎的Qwt,ChartDirector,小巧玲珑的QCustomPlot,当然还有...
    尘中远阅读 23,103评论 0 49