自定义框架控制高并发

1.业务背景:最近在做一个应对高并发的项目,其中涉及到后台需登录两个系统,双token关系建立,双系统的用户信息同步。登录结果返回需要满足异步,同步返回,以及可以指定返回结果。为了满足以上这些需求,搭建了一个小框架,可以动态的实现。拿来分享一下。
2.相关技术及设计模式:观察者模式,线程池使用,future类异步等待登录结果,监听器,匿名内部类,抽象类,CountDownLatch线程等待。
3.代码流程梳理:
3.1 初始化阶段
a.在用户登录的时候先初始化监听器以及启动线程的个数,将初始化信息放到Map中,触发登录时用。
开始初始化,将登录类初始化到组件中b.创建配置类,主要是一些开关的配置,控制同步,异步,以及指定返回结果的开关。
在这里插入图片描述c.根据总配置类中的属性,来确定是异步还是同步,如果是异步,执行任务计数器初始化(此处不光针对双系统,多系统也可以用)
在这里插入图片描述d.这里的核心方法时getExceLogicHandle方法,决定任务计数器任务的多少。因为此方法所在类AbstractDispatch为抽象类,而AccountPassLoginServiceComponent类继承了AbstractDispatch并实现了getExceLogicHandle方法,所以可以在AccountPassLoginServiceComponent中将执行的任务放入List集合中,通过计算集合的长度来确定任务的多少。
这里只是将将要执行的任务初始化到List集合中,具体的登录在调用start方法后执行,接下来会讲到e.回到AbstractDispatch类中,继续我们的登录前准备工作,初始化监听器。将监听器,装有任务的List集合放到主任务类中。赋值EventBus类(主要是配置)。
上一步要执行的任务遍历出来注册到EvenBus类中f.接下来要去EvenBus类中去,将任务对象添加到map集合中,起key值是利用反射获取的任务对象的类名。
判断集合中是否含有相同的任务对象,保证所有的任务只能有一个返回的结果是真,当异步有指定返回结果时。否则抛异常g.以上就是所有的初始化的过程,其中用到的技术,主要是抽象类,匿名内部类,监听器,以及CountDownLatch计数器。
3.2 登录阶段
a.调用start方法,开始真正的登录
在这里插入图片描述b.接下来就该从初始化的类中取任务执行了,将参数放入任务中,开始登录。
在这里插入图片描述cd1为监听器,实际继承CountDownLatch方法,调用await方法的目的是让所有的任务线程执行完后才能取结果,每一个线程任务执行完后调用countDown方法将计数器中的总数减1,直到所有的任务执行完后主线程才能执行。
c.利用反射机制获取任务对象,获取任务的List集合,遍历任务,执行登录。
在这里插入图片描述e.调用ExecLogicHandle类中的handleEvent方法。首先判断isSync是否为true。同步则开启单线程执行任务,异步则创建线程池,异步执行。线程池利用 ExecutorServiceManager.getScheduledThreadPool()创建。
在这里插入图片描述执行后,将结果放到Future中,其中在监听器中的有一个List类型的Future属性。目的是方便方法后处理使用。
d.调用登录serivice类,执行A系统和B系统登录
在这里插入图片描述e.至于控制返回结果的开关是,在初始化时isOpenReturn的开关判断。
在这里插入图片描述f.登录成功后在监听器中取得登录结果,返回前端。

4.补充:线程池的初始化数可根据ExecutorServiceManager.DEFAULT_POOL_SIZE在服务器启动阶段赋值。
5.总结:这个框架主要用到的技术是java最基本的技术,越底层的东西,也就越基础,高楼大厦平底起,有一个扎实的基本功决定你的高度。
备注:这是博主第一次写博客,这篇文章主要是以笔记的形式书写的,好多技术和功能点没有涵盖全和解释清楚,以后会补全,如您读到这篇博客,请您见谅!需要源码的可以加我qq:1725913683

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值