zoukankan      html  css  js  c++  java
  • 订单入库后异步推送

     注意:异步推送,并不会等到当前方法执行完后再执行,而是在当前线程外再开启一个线程,并行执行,所以在项目中如果有配置主从,

    或者异步执行的方法查询数据库的信息的语句更新在推送异步之后,要进行适当的线程休眠,等待主线程执行完毕、等待主线程的数据库事务提交、等待主从数据库之间的数据延迟!

        @Autowired//注入ConfigurableApplicationContext 
        private ConfigurableApplicationContext context;
    
    
    private void push(Order order){
                insertOrder(order);
                //消息通知新增订单
                context.publishEvent(new OrderInsertEvent(order));          
    }
                      
    /**
     * 订单插入事件
     */
    public class OrderInsertEvent extends ApplicationEvent {
        public OrderInsertEvent(Order order) {
            super(order);
        }
    }
    @Log4j2
    @Component
    public class OrderInsertListener {
    
        @Autowired
        @Lazy
        private OrderNoticeService orderNoticeService;
    
    
        @EventListener
        public void onApplicationEvent(OrderInsertEvent event) {
            Order order = (OrderBasicRequestEntity) event.getSource();
            //消息推送订单入库通知
            orderNoticeService.notice(order);
        }
    }
    public interface OrderNoticeService {
        void notice(Order order);
    }    
    @Service
    @Log4j2
    public class OrderNoticeServiceImpl implements OrderNoticeService {
    
        @Async//开启异步
        @Override
        public void notice(Order order) {
            log.info("通知其他服务 :" + order.getId());
         try {
            //执行通知代码,try住异常,不让异常影响其他通知执行
              } catch (Exception e) {
                log.error("质控部分添加出错:", e);
              }
        }
    }
  • 相关阅读:
    java中math类
    java中的值传递和引用传递(转)
    eclipse 字体和配色修改
    JAR WAR EAR包的区别
    java中基本类型
    tomcat 7.0 配置详解
    或许你需要一些可操作性更强的实践
    Assembly.CreateInstance()与Activator.CreateInstanc
    OOD沉思录2 类和对象的关系包含关系
    C#的插件开发
  • 原文地址:https://www.cnblogs.com/huanghuanghui/p/11430837.html
Copyright © 2011-2022 走看看