基于线程池的直充接口异步响应
基于线程池的直充接口异步响应
由于拼多多要求虚拟产品直充接口在500ms内返回响应,所以采用异步响应的模式:创建任务,用于调用后续权益下发等接口,并将该任务提交到线程池中。
1.创建实现Runnable接口的任务类
重写run()方法,完成后续权益下发等逻辑,并回调拼多多的接口告诉拼多多充值成功与否。多线程Runable任务的参数一般是以对象实例对象的形式配置的,通过构造方法来输入。
1 | /** |
2.创建线程池管理类
创建线程池管理类,在静态代码块中创建几个线程池,用于进行响应的异步工作。
1 | public class ThreadPoolManager { |
3.在直充接口中将新任务放入线程池中
在提供给拼多多的直充接口中,添加将新任务放入线程池中的逻辑,然后直接返回响应成功,后续权益发放、回调通知的逻辑交给线程池中的线程去做。
1 | // 3.异步线程处理 |
基于策略模式的数据库失败订单轮询处理
使用定时任务查询数据库,查询失败订单;使用设计工厂模式和策略模式,针对订单状态字段的不同值,调用不同的工厂实例执行抽象方法的不同实现逻辑。之前介绍过借助Spring依赖注入来创建工厂的形式,这里则是采用applicationContext.getBean(Class<T> var1)方法通过Class类来获取实例bean的工厂。
1.创建实例bean接口
先创建一个接口,后续的工厂对象类都是该接口的实现类。
1 | public interface FailedOrderStrategy { |
2.创建工厂对象类
创建工厂对象类,并将它们放入Spring容器中。
1 |
|
1 |
|
3.创建枚举类
创建枚举类,以工厂对象类的Class对象作为枚举的一个属性。
1 | public enum StoreOrderStatusEnum { |
4.创建工厂类
创建工厂类,该工厂可以根据输入参数找到对于的枚举类,然后取出枚举类中的工厂对象bean,使用其方法。
1 |
|
5.在定时任务中使用工厂对象
在定时任务中查询数据库,根据失败订单的状态字段,选择不同的工厂对象,执行对于的业务策略。
1 |
|