pub/sub 沟通和演员

pub/sub communication and Actors

我们正在考虑使用消息代理来实现基于消息的发布-订阅通信模式。

您是否需要使用 Actor 模型才能在您的微服务之间进行基于消息的 pub/sub 通信。

大多数消息代理允许同步和异步API。首先,您必须决定使用哪个 API:同步或异步。同步更简单,但使用阻塞 I/O 操作。阻塞操作会阻塞一个线程,并且您必须保留与等待 I/O 操作的线程数一样多的线程数。由于每个线程都会消耗大量的核心内存,因此每个 Java 进程有大约 10000 个线程的自然限制。所以首先评估你是否可以使用同步API,如果是,就使用它。

如果一个JVM同时循环的消息数超过10000条,那你就得用异步API,异步处理消息。 Actor 只是一种异步处理单元。其他的是来自标准 java 的 CompletableFuture,来自 RxJava 和其他反应库的观察者,或者通常消息代理提供他们自己的异步处理方式。查看所有异步库并选择您更喜欢的。

消息代理只是其中一种异步机制。 Actor 模型是更广泛的概念,即当消息被发送到本地 actor 时(即 运行 在同一程序中,在同一线程中)。

因此,它们彼此独立:消息代理可以在没有参与者的情况下使用(即 redis、rabbit-mq、zero-mq),以及参与者可以在没有消息代理的情况下实现。