美文网首页
异步调用场景

异步调用场景

作者: Candy_糖果 | 来源:发表于2019-03-01 08:27 被阅读0次

工作问题

某个单子被拒绝后,需要调用远程服务,根据返回的值执行后续一系列操作,可是调用接口时间不可控

常见的场景

例如在第三方售票平台购票,它不会返回购票成功与否,而是先提示下单成功,等最终成功后会才发送短信提醒,不会让用户一直处于等待状态

问题分析

如果是做成同步,会造成以下影响

  1. 调用第三方服务的时长是不可控的,特别是如果你不清楚背后的逻辑。这样,用户会一直处于等待状态,造成不好的体验
  2. 所以,跨服务调用一定要小心,如果做成同步,需要设置等待第三方服务返回时长,事务回滚等

异步解决方案

  1. 将需要调用第三方服务的订单id保存起来,给用户返回一个需要等待最终结果的状态
  2. 通过定时器去跑数据库里需要执行远程调用的id,最终改变订单状态
  3. 表设计
# relative_id, event_type 可适应不同事件的id

CREATE TABLE asynchronous_invocation_task
(
  id           bigint(20) PRIMARY KEY NOT NULL AUTO_INCREMENT,
  relative_id  bigint(20) COMMENT '关联id',  
  event_type   tinyint(4) COMMENT '事件类型',
  status       tinyint(4) COMMENT '执行结果 0:成功 1:失败',
  is_calculate tinyint(4) DEFAULT '0' NOT NULL
  COMMENT '是否计算过,0:没计算 1:计算过 默认为0',
  create_time  datetime               NOT NULL
  COMMENT '创建时间',
  update_time  datetime COMMENT '更新时间'
);
CREATE INDEX unique_relative_event
  ON asynchronous_invocation_task (relative_id, event_type);

如果你有更好的解决方案,欢迎留言讨论

相关文章

  • Spring中使用@Async异步调用方法

    摘要 异步调用传统SSM项目实现 异步调用SpringBoot实现 Async简介: 异步方法调用使用场景:处理日...

  • 跟诸子学游戏 unity3d中的线程

    1:异步加载场景依旧出现卡顿 :使用异步方式来加载场景,加载过程中的动画和场景还是会出现卡顿? 调用异步加载场景...

  • SOFA 源码分析 — 调用方式

    前言 SOFARPC 提供了多种调用方式满足不同的场景。 例如,同步阻塞调用;异步 future 调用,Callb...

  • MQ概述

    MQ绪论 事件紧急 打电话 同步调用事件不紧急 发短信 发邮件 异步调用 同步 异步调用效果对比 业务场景:电商下...

  • 异步调用场景

    工作问题 某个单子被拒绝后,需要调用远程服务,根据返回的值执行后续一系列操作,可是调用接口时间不可控 常见的场景 ...

  • Spring Boot 整合异步任务以及实现场景

    @EnableAsync 开启异步调用方法@Async 声明一个异步任务异步使用场景:发送短信,发送邮件,App消...

  • Spring @Async异步调用,实现异步发送邮件

    Spring异步调用 异步调用应用场景 在请求一个Controller时,需要进行操作A、B、C,默认情况下,属于...

  • mq 面试题

    一、mq的使用场景:①、解耦 比如:订阅消息,异步处理逻辑②、异步化处理 ,有些场景无需同步调用,可以通过消息队列...

  • 2020-11-23 在List中调用异步函数

    每天一难:业务场景: 先取到ListA,然后在循环中调用另外一个异步函数,等所有的异步函数都调用成功后,集合所有的...

  • Spring中使用@Async异步调用方法

    Async简介:异步方法调用使用场景:处理日志、发送邮件、短信...... spring中提供了@Async来实现...

网友评论

      本文标题:异步调用场景

      本文链接:https://www.haomeiwen.com/subject/nlrruqtx.html