private void ReadyForConsumers() { Receive <IRequestModelConsumer>(requestModel => { var model = _conn.CreateModel(); var rabbitModelConsumerActorRef = Context.System.ActorOf(RabbitModelConsumer.CreateProps(model, requestModel)); _consumersActorRefs.Add(rabbitModelConsumerActorRef); var consumerSupervisedActorRef = Context.System.ActorOf(RabbitActorSupervisor.CreateProps(rabbitModelConsumerActorRef)); _consumersActorRefs.Add(consumerSupervisedActorRef); Sender.Tell(consumerSupervisedActorRef); }); Receive <IRequestModelConsumerWithConcurrencyControl>(requestModel => { var model = _conn.CreateModel(); var rabbitModelConsumerWithConcurrencyControlActorRef = Context.System.ActorOf(RabbitModelConsumerWithConcurrencyControl.CreateProps(model, requestModel)); _consumersActorRefs.Add(rabbitModelConsumerWithConcurrencyControlActorRef); var consumerSupervisedActorRef = Context.System.ActorOf(RabbitActorSupervisor.CreateProps(rabbitModelConsumerWithConcurrencyControlActorRef)); _consumersActorRefs.Add(consumerSupervisedActorRef); Sender.Tell(consumerSupervisedActorRef); }); }
private void ReadyForPublishers() { Receive <IRequestModelPublisher>(requestModelPublisher => { var model = _conn.CreateModel(); var rabbitModelPublisherActorRef = Context.System.ActorOf(RabbitModelPublisher.CreateProps(model, requestModelPublisher)); var supervisedActorRef = Context.System.ActorOf(RabbitActorSupervisor.CreateProps(rabbitModelPublisherActorRef)); _publishersActorRefs.Add(supervisedActorRef); Sender.Tell(supervisedActorRef); }); Receive <IRequestModelPublisherRemoteProcedureCall>(requestModelPublisherRemoteProcedureCall => { IActorRef publisherActorRef; var model = _conn.CreateModel(); var responseQueueName = Guid.NewGuid().ToString(); var routingRpcReplyKey = $"{requestModelPublisherRemoteProcedureCall.RoutingKey}###RPCReply"; if (string.IsNullOrEmpty(requestModelPublisherRemoteProcedureCall.ExchangeName)) { var modelRemoteProcedureCallPublisherWithDirectQueueConsumer = new ModelRemoteProcedureCallPublisherWithDirectQueueConsumer( requestModelPublisherRemoteProcedureCall, responseQueueName); var rabbitModelRemoteProcedureCallPublisherActorRef = Context.System.ActorOf( RabbitModelRemoteProcedureCallPublisher.CreateProps(model, modelRemoteProcedureCallPublisherWithDirectQueueConsumer)); publisherActorRef = rabbitModelRemoteProcedureCallPublisherActorRef; } else { var modelRemoteProcedureCallPublisherWithTopicExchangeConsumer = new ModelRemoteProcedureCallPublisherWithTopicExchangeConsumer( requestModelPublisherRemoteProcedureCall, new PublicationAddress(ExchangeType.Topic, requestModelPublisherRemoteProcedureCall.ExchangeName, routingRpcReplyKey)); var rabbitModelRemoteProcedureCallPublisherActorRef = Context.System.ActorOf( RabbitModelRemoteProcedureCallPublisher.CreateProps(model, modelRemoteProcedureCallPublisherWithTopicExchangeConsumer)); publisherActorRef = rabbitModelRemoteProcedureCallPublisherActorRef; } var publisherSupervisedActorRef = Context.System.ActorOf(RabbitActorSupervisor.CreateProps(publisherActorRef)); var requestModelConsumer = new RequestModelConsumer( requestModelPublisherRemoteProcedureCall.ExchangeName, responseQueueName, routingRpcReplyKey, publisherSupervisedActorRef); var rabbitModelConsumerActorRef = // TODO need to add supervisor for consumer too Context.System.ActorOf(RabbitModelConsumer.CreateProps(model, requestModelConsumer)); var consumerSupervisedActorRef = Context.System.ActorOf(RabbitActorSupervisor.CreateProps(rabbitModelConsumerActorRef)); consumerSupervisedActorRef.Tell("start consuming"); // TODO restart consumers on resume _consumersActorRefs.Add(consumerSupervisedActorRef); _publishersActorRefs.Add(publisherSupervisedActorRef); Sender.Tell(publisherSupervisedActorRef); }); }