1

我正在尝试通过使用spring的应用程序事件和线程池执行器来实现演员模型模式(与生产者消费者有点混搭)我的主要目标是解耦每一层。我的架构如下:我部署了一个战争,通过休息 API 接收业务事务请求,在任何给定时刻都可以有 X 数量的事务活动,其中 X 是可配置的数量,实际执行必须是异步的,并且每个事务必须在不同的线程中。请求本身以先进先出的方式处理,但它有一些复杂性,因为某些请求必须等待其他请求完成才能处理,但这并不意味着无法处理其他请求,例如:don'

存款(2) 取款(2) 存款(3)

其中数字是帐号,我想按以下顺序处理它们:

存款(2) 存款(3) 取款(2)

我已经以这种方式构建了体系结构:我有一个休息 api,它获取命中并将它们写入数据库(分布式系统必须在数据库中具有状态)并在应用程序上下文中发布一个 clientrequestevent 我有单例 bean负责发布生产者事件并监控他发送了多少事件(即:他负责限制并发进程的数量并实现上述逻辑)并且我还有几个其他监听器每个动作(提款押金)等..) 监听后者发布的事件并发布完成事件。

每件事都很好,一切都完成了不同的线程,所有的流程都很好,但是我在中间层有问题,负责确定是否有空闲插槽我不想有同步方法,我也不想想围绕 atomiclong 或类似的东西做一些技巧,我宁愿使用一些阻塞队列来发布事件,但我找不到确定事件何时完成的好方法,所以我可以放一个新的。最大的问题是,为了请求一项新工作,我必须去数据库,这是一项繁重的任务,因为这个系统应该在重负载下工作。我想以某种方式利用阻塞队列和线程池,以便在一个插槽空闲的那一刻从带有线程的大小有界队列中获取

什么是处理这个的好方法?提前致谢

4

0 回答 0