Ask vs Tell o reenviar actores que usan Akka Streams

Hola, estoy trabajando akka streamsjunto con akka-stream-kafka. Estoy configurando un Stream con la siguiente configuración:

Source (Kafka) --> | Akka Actor Flow | --> Sink (MongoDB)

Actor Flow básicamente por actores que procesarán datos, a continuación se muestra la jerarquía:

                                      System
                                         | 
                                     Master Actor  
                                      /       \
                          URLTypeHandler     SerializedTypeHandler
                             /       \                   |
                     Type1Handler   Type2Handler     SomeOtherHandler

Entonces Kafka tiene el mensaje, escribo al consumidor y lo ejecuto en atMostOnceSourceconfiguración y uso

Consumer.Control control =
            Consumer.atMostOnceSource(consumerSettings, Subscriptions.topics(TOPIC))
                    .mapAsyncUnordered(10, record -> processAccessLog(rootHandler, record.value()))
                    .to(Sink.foreach(it -> System.out.println("FinalReturnedString--> " + it)))
                    .run(materializer);

Inicialmente he usado una impresión como sumidero, solo para que el flujo funcione.

y el processAccessLogse define como:

private static CompletionStage<String> processAccessLog(ActorRef handler, byte[] value) {

    handler.tell(value, ActorRef.noSender());

    return CompletableFuture.completedFuture("");
}

Ahora, desde la definición askdebe usarse cuando un actor espera una respuesta, tiene sentido en este caso, ya que quiero devolver los valores que se escribirán en el sumidero.

Pero todos (incluidos los documentos) mencionan para evitar asky más bien usar telly forward, un blog increíble está escrito en él No pregunte, diga .

En el blog que menciona, en el caso de actores anidados, use tellel primer mensaje y luego use forwardel mensaje para llegar al destino y luego, después del procesamiento, envíe el mensaje directamente al actor raíz.

desde el blog

Ahora aquí está el problema,

  1. ¿Cómo envío el mensaje de D a A para que aún pueda usar el receptor?
  2. ¿Es una buena práctica tener transmisiones abiertas? Ej. Streams donde Sink no importa porque los actores ya han hecho el trabajo. (No creo que sea recomendable hacerlo, parece defectuoso).
Respuesta 1

Tengo una aplicación Java Spring Boot que funciona con una base de datos Postgres. Quiero usar Docker para los dos. Inicialmente, creé un archivo docker-compose.yml como se muestra a continuación: versión: servicios '3': db: ...

Tenía el siguiente comando funcionando bien con OpenJDK mvn clean install Luego desinstalé OpenJDK e instalé Oracle JDK 8, y ahora cuando ejecuto mvn clean install El entorno JAVA_HOME ...

Cómo podría definir algunos esquemas y datos que se insertarán en db para la base de datos sql en el arranque de primavera También podría hacer esto para las bases de datos incrustadas Por ejemplo, estoy usando dos bases de datos y quiero ...

Soy novato en Spring & Hibernate, tratando de ejecutar proyectos que los ejecuten juntos. Después de muchos errores, arreglar las cosas funciona bien, pero cuando estoy ejecutando la clase principal todavía obtengo esa excepción ...