当前位置:网站首页 > Java教程 > 正文

java抢票教程



image.png


模拟12306网上抢票的业务场景。春节等高峰时期,车票资源非常紧张,因此在约定时间放票,会存在大量抢票行为。服务器为了缓解并发高峰时的压力,抢票请求会用消息中间件进行排队处理。出票行为在服务器的独立线程中进行,这样主线程主要用于接收购票请求,异步线程用于出票,会大大缓解服务器的压力。


# 01、案例:12306抢票



操作步骤如下所述。


(1) 新建控制器支持异步模式。



(2) 控制器的service()方法是一个高并发环境。


每个HTTP请求都使用独立的request对象。调用request.startAsync(),为每个HTTP请求创建一个异步回应的环境。



(3) 所有异步回应在独立线程中统一处理。


AuctionListener实现了ServletContextListener监听器,因此在Tomcat启动时被加载。BlockingQueue为阻塞队列,装载所有与请求对应的AsyncContext对象。



ServletContextListener的contextInitialized()方法代码如下,独立的后台线程从队列queue中顺序提取AsyncContext对象,然后分别调用每个AsyncContext的response对象,给不同的客户端回应数据。



(4) 客户端模拟多用户并发抢票,循环发出20个异步请求。



(5) 对比服务器异步回应和同步回应,异步抢票结果见图1。


在这个示例中,所有用户的并发购票请求,都会先存在一个阻塞队列中,然后由一个后台异步线程,顺序从阻塞队列中提取请求,当出票结束后再回应客户端。这样做的好处是服务器的压力很小,虽然用户的等待时间较长,但是这样保证了用户购票请求的正确处理。


image.png


■ 图1 12306抢票

版权声明


相关文章:

  • java list菜鸟教程2025-03-01 13:10:02
  • java206教程2025-03-01 13:10:02
  • 屠龙炮java教程2025-03-01 13:10:02
  • java判卷制作教程2025-03-01 13:10:02
  • 358集java教程2025-03-01 13:10:02
  • java mahout使用教程2025-03-01 13:10:02
  • java-ee安装教程2025-03-01 13:10:02
  • reactor 教程 Java2025-03-01 13:10:02
  • java位移教程2025-03-01 13:10:02
  • java8 教程2025-03-01 13:10:02