Jestem w trakcie rozpoczynania nowego projektu (opartego na Javie). Muszę go zbudować jako architekturę modułową, rozproszoną i odporną.
Dlatego chciałbym, aby procesy biznesowe komunikowały się między sobą, były interoperacyjne, ale także niezależne.
Patrzę teraz na dwa frameworki, które oprócz różnicy wieku wyrażają 2 różne poglądy:
- Akka ( http://akka.io )
- Reactor ( https://github.com/reactor/reactor )
Co powinienem wziąć pod uwagę przy wyborze jednego z powyższych frameworków?
O ile do tej pory rozumiem, Akka jest nadal w jakiś sposób sprzężona (w taki sposób, że muszę „wybrać” aktora, do którego chcę wysłać wiadomości), ale bardzo odporna. Gdy Reactor jest luźny (na podstawie publikowania zdarzeń).
Czy ktoś może mi pomóc zrozumieć, jak podjąć właściwą decyzję?
AKTUALIZACJA
Po dokładniejszym przejrzeniu Event Bus of Akka uważam, że w pewien sposób funkcje wyrażone przez Reactor są już zawarte w Akce.
Na przykład subskrypcja i publikowanie wydarzeń, udokumentowane na https://github.com/reactor/reactor#events-selectors-and-consumers , można wyrazić w akce w następujący sposób:
final ActorSystem system = ActorSystem.create("system");
final ActorRef actor = system.actorOf(new Props(
new UntypedActorFactory() {
@Override
public Actor create() throws Exception {
return new UntypedActor() {
final LoggingAdapter log = Logging.getLogger(
getContext().system(), this);
@Override
public void onReceive(Object message)
throws Exception {
if (message instanceof String)
log.info("Received String message: {}",
message);
else
unhandled(message);
}
};
}
}), "actor");
system.eventStream().subscribe(actor, String.class);
system.eventStream().publish("testing 1 2 3");
Dlatego teraz wydaje mi się, że główne różnice między nimi to:
- Akka, bardziej dojrzały, związany z Typesafe
- Reaktor, wczesny etap, związany ze wiosną
Czy moja interpretacja jest prawidłowa? Ale jaka jest koncepcyjna różnica między aktorem w Akce a konsumentem w reaktorze ?