public ReaderSource <T> CurrentTaggedEvents(Tag tag) { if (tag == null) { throw new ArgumentException("Tag is null"); } var actorName = Regex.Replace(_topic, @"[^\w\d]", ""); var msg = new CurrentEventsByTag <T>(_tenant, _namespace, _topic, _fromMessageId, _toMessageId, tag, _brokerWebServiceUrl, _conf.ReaderConfigurationData, _clientConfiguration); var actor = _actorSystem.ActorOf(CurrentEventsByTagActor <T> .Prop(msg, _client, _lookup, _cnxPool, _generator, _schema), actorName); return(new ReaderSource <T>(_brokerWebServiceUrl, actor)); }
public SqlSource <IEventEnvelope> CurrentTaggedEvents(Tag tag) { if (tag == null) { throw new ArgumentException("Tag is null"); } var buffer = new BufferBlock <IEventEnvelope>(); var actorName = Regex.Replace(_topic, @"[^\w\d]", ""); var msg = new CurrentEventsByTag(_tenant, _namespace, _topic, _selectedColumns, _fromMessageId, _toMessageId, tag, _options, _brokerWebServiceUrl); var actor = _actorSystem.ActorOf(CurrentEventsByTagActor.Prop(msg, buffer), actorName); return(new SqlSource <IEventEnvelope>(_brokerWebServiceUrl, buffer, actor)); }
public CurrentEventsByTagActor(CurrentEventsByTag message, BufferBlock <IEventEnvelope> buffer) { _admin = new Admin.Public.Admin(message.AdminUrl, new HttpClient()); _buffer = buffer; _message = message; var topic = $"persistent://{message.Tenant}/{message.Namespace}/{message.Topic}"; var partitions = _admin.GetPartitionedMetadata(message.Tenant, message.Namespace, message.Topic); Setup(partitions.Body); Receive <Terminated>(t => { var children = Context.GetChildren(); if (!children.Any()) { Context.System.Log.Info($"All children exited, shutting down in 5 seconds :{Self.Path}"); Self.GracefulStop(TimeSpan.FromSeconds(5)); } }); }
public CurrentEventsByTagActor(CurrentEventsByTag <T> message, IActorRef client, IActorRef lookup, IActorRef cnxPool, IActorRef generator, ISchema <T> schema) { _admin = new Admin.Public.Admin(message.AdminUrl, new HttpClient()); _message = message; _schema = schema; _client = client; _buffer = new BufferBlock <IMessage <T> >(); _cnxPool = cnxPool; _lookup = lookup; _generator = generator; var topic = $"persistent://{message.Tenant}/{message.Namespace}/{message.Topic}"; var partitions = _admin.GetPartitionedMetadata(message.Tenant, message.Namespace, message.Topic); Setup(partitions.Body, topic); Receive <Akka.Actor.Terminated>(t => { var children = Context.GetChildren(); if (!children.Any()) { Context.System.Log.Info($"All children exited, shutting down in 5 seconds :{Self.Path}"); Self.GracefulStop(TimeSpan.FromSeconds(5)); } }); Receive <ReceivedMessage <T> >(m => { _buffer.Post(m.Message); }); Receive <Messages.Receive>(_ => { if (_buffer.TryReceive(out var message)) { Sender.Tell(new AskResponse(message)); } else { Sender.Tell(new AskResponse(null)); } }); }
public static Props Prop(CurrentEventsByTag message, BufferBlock <IEventEnvelope> buffer) { return(Props.Create(() => new CurrentEventsByTagActor(message, buffer))); }
public static Props Prop(CurrentEventsByTag <T> message, IActorRef client, IActorRef lookup, IActorRef cnxPool, IActorRef generator, ISchema <T> schema) { return(Props.Create(() => new CurrentEventsByTagActor <T>(message, client, lookup, cnxPool, generator, schema))); }