我正在尝试使用spring的应用程序事件和threadpoolexecutors来实现actor模型模式(Somewhat mashed toghter with producer consumer) 我的主要目标是解耦每个层。 我的架构如下: 我部署了一个战争,通过休息API接收业务事务请求,在任何给定时刻可以有X个事务处于活动状态 其中X是可配置的数字,实际执行必须是异步的,每个事务必须在不同的线程中。 请求本身以FIFO方式处理,但是它有一些复杂性,因为一些请求必须等待其他请求才能被处理,但这并不意味着其他请求无法处理,例如:如果在此之前要求存入账户2,请不要处理账户2的提款,所以如果我获得点击:
存款(2) 退回(2) 存款(3)
其中数字是我希望按此顺序处理它们的帐号:
存款(2) 存款(3) 退回(2)
我用这种方式构建了这个架构: 我有一个休息api获取命中并将它们写入DB(必须在DB中具有状态的分布式系统)并发布 客户端在应用程序上下文中的事件 我有单独的bean负责发布生产者事件并监视他发送了多少事件(即:他负责限制并发进程的数量并实现上述逻辑) 我还有一些其他听众,每个人都采取行动(取款存款等),听取后者发布的事件并发布完成事件。
每件事都很有效,所做的一切都是不同的线程,所有流程都很棒,但我有 中间层的问题是负责确定是否存在空闲时隙的人 我不想有一个同步方法,也不想做一些原子龙或类似的技巧,我宁愿使用一些阻塞队列来发布事件,但我找不到一个很好的方法来确定一个事件是什么时候这样做我可以把一个新的。 最大的问题是,对于请求新工作,我必须去DB,这是一项繁重的任务,因为这个系统应该在高负荷下工作。 我想以某种方式利用一个阻塞队列和一个线程池,这样就可以从一个有线程的大小有界队列中获取一分钟一个时隙是免费的
处理这个问题的好方法是什么? 提前谢谢