如何处理 Ver.tx 中变量的同步更新?

How to handle simultaneous updates on a variable in Ver.tx?

我是 Vert.x 的新手。我有一个场景,我需要计算一个 Verticle 中的所有传入请求——它用作 REST API。

如果我只是增加所有请求的计数器,那么对于同时请求,该值将不正确 ‒ 因为它会同时被所有请求更新。这将与多个线程同时更新一个变量相同。

如何处理Vert.x中的这种情况?

一个解决方案是实现一个 Verticle(和一个处理程序)来执行 counting/aggregation。每次收到请求时,您都会向该地址发布一条消息(实际上什么都没有),当 Verticle 收到它时,计算一下——只需添加一个。如果您需要 count 值,则需要另一个处理程序。要记住的一件事是,您只需要实例化 其中的一个 ‒ 如果您有集群,问题会稍微复杂一些。

但是,既然 Vert.x 提供了一些开箱即用的东西,称为 Asynchronous counters,您为什么要这样做呢?虽然这会锁定,但这将是在集群中完成该任务的最简单方法之一。