Estou começando um novo projeto (baseado em java). Eu preciso construí-lo como uma arquitetura modular, distribuída e resiliente.
Portanto, gostaria que os processos de negócios se comuniquem entre si, sejam interoperáveis, mas também independentes.
Estou olhando agora para dois frameworks que, além de suas diferenças de idade, expressam 2 visões diferentes:
- Akka ( http://akka.io )
- Reactor ( https://github.com/reactor/reactor )
O que devo considerar ao escolher uma das estruturas acima?
Pelo que eu entendi até agora, Akka ainda é de alguma forma acoplado (de uma forma que eu tenho que 'escolher' o ator para o qual desejo enviar as mensagens), mas muito resiliente. Enquanto o Reactor está solto (com base na postagem do evento)
Alguém pode me ajudar a entender como tomar uma decisão adequada?
ATUALIZAR
Depois de revisar melhor o Event Bus do Akka, acredito que de alguma forma os recursos expressos pelo Reactor já estão incluídos no Akka.
Por exemplo, a assinatura e a publicação do evento, documentadas em https://github.com/reactor/reactor#events-selectors-and-consumers , podem ser expressas em Akka da seguinte forma:
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");
Portanto, parece-me agora que as principais diferenças entre os dois são:
- Akka, mais maduro, ligado ao Typesafe
- Reator, estágio inicial, vinculado à primavera
Minha interpretação está correta? Mas qual é a diferença conceitual entre o Ator em Akka e o Consumidor em Reactor ?