akka stream ActorSubscriber不能与远程参与者一起使用

akka stream ActorSubscriber不能与远程参与者一起使用,stream,akka,Stream,Akka,说: ActorPublisher和ActorSubscriber不能与远程参与者一起使用,因为如果反应流协议(如请求)的信号丢失,流可能会死锁 这是否意味着akka流不是位置透明的?如何使用akka stream设计一个支持背压的客户机-服务器系统,其中客户机和服务器位于不同的机器上 我一定是误解了什么。感谢您的澄清。目前,他们严格地说是当地的一家工厂。 您可以将它连接到TCP接收器/源,它也将使用TCP应用背压(Akka Http就是这样做的) 如何使用akka stream设计一个支持背压

说:

ActorPublisher和ActorSubscriber不能与远程参与者一起使用,因为如果反应流协议(如请求)的信号丢失,流可能会死锁

这是否意味着akka流不是位置透明的?如何使用akka stream设计一个支持背压的客户机-服务器系统,其中客户机和服务器位于不同的机器上


我一定是误解了什么。感谢您的澄清。

目前,他们严格地说是当地的一家工厂。 您可以将它连接到TCP接收器/源,它也将使用TCP应用背压(Akka Http就是这样做的)

如何使用akka stream设计一个支持背压的客户机-服务器系统,其中客户机和服务器位于不同的机器上

退房(2016年12月,18个月后):


动脉是它的代号。在许多情况下,它是旧远程处理的替代品,但是实现是全新的,并且有许多重要的改进

(远程处理使不同主机或JVM上的参与者系统能够相互通信)

关于背压,这不是一个完整的解决方案,但它可以帮助:

背压呢?Akka Streams完全是关于背压的,但演员信息是没有任何背压的火和遗忘。这种设计是如何处理的

我们不能神奇地给演员的信息增加压力。这仍然必须使用消息流控制技术在应用程序级别进行处理,如确认、工作拉入和节流

当消息被发送到远程目的地时,它会被添加到第一阶段(称为
SendQueue
)正在处理的队列中。这个队列是有界的,如果它溢出,消息将被丢弃,这与actor消息传递最多一次的性质是一致的。如果没有应用程序级流控制,则不应发送大量消息。例如,如果消息序列化速度慢,并且无法跟上发送速率,则此队列将溢出

Aeron将背压从接收节点传播到发送节点,即,如果另一端的AeronSource较慢且缓冲区已填满,则出站流中的AeronSink将不会进行。
如果消息的发送速率高于接收节点可以使用的速率,
SendQueue
将溢出,消息将被丢弃
Aeron本身有很大的缓冲区,能够处理突发消息

在网络分区的情况下也会发生同样的情况。当Aeron缓冲区已满时,SendQueue将丢弃消息

在入站流中,消息最终被发送到接收方参与者。这是一个普通的actor tell,它将消息排入actor邮箱的队列这是背压在接收侧结束的地方。如果参与者的速度低于传入邮件的速度,则邮箱将像往常一样填满

总之,参与者消息的流控制必须在应用程序级别实现。动脉不会改变这一事实