public EventsByTopicActor(EventsByTopic <T> message, IActorRef client, IActorRef lookup, IActorRef cnxPool, IActorRef generator, ISchema <T> schema) { var httpClient = new HttpClient(); _admin = new Admin.Public.Admin(message.AdminUrl, httpClient); _message = message; _schema = schema; _client = client; _cnxPool = cnxPool; _lookup = lookup; _generator = generator; _buffer = new BufferBlock <IMessage <T> >(); var topic = $"persistent://{message.Tenant}/{message.Namespace}/{message.Topic}"; var partitions = _admin.GetPartitionedMetadata(message.Tenant, message.Namespace, message.Topic); Setup(partitions.Body, topic); 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 ReaderSource <T> Events() { var actorName = Regex.Replace(_topic, @"[^\w\d]", ""); var msg = new EventsByTopic <T>(_tenant, _namespace, _topic, _fromMessageId, _toMessageId, _brokerWebServiceUrl, _conf.ReaderConfigurationData, _clientConfiguration); var actor = _actorSystem.ActorOf(EventsByTopicActor <T> .Prop(msg, _client, _lookup, _cnxPool, _generator, _schema), actorName); return(new ReaderSource <T>(_brokerWebServiceUrl, actor)); }
public SqlSource <IEventEnvelope> Events() { var buffer = new BufferBlock <IEventEnvelope>(); var actorName = Regex.Replace(_topic, @"[^\w\d]", ""); var msg = new EventsByTopic(_tenant, _namespace, _topic, _selectedColumns, _fromMessageId, _toMessageId, _options, _brokerWebServiceUrl); var actor = _actorSystem.ActorOf(EventsByTopicActor.Prop(msg, buffer), actorName); return(new SqlSource <IEventEnvelope>(_brokerWebServiceUrl, buffer, actor)); }
public EventsByTopicActor(EventsByTopic 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, topic); }
public static Props Prop(EventsByTopic <T> message, IActorRef client, IActorRef lookup, IActorRef cnxPool, IActorRef generator, ISchema <T> schema) { return(Props.Create(() => new EventsByTopicActor <T>(message, client, lookup, cnxPool, generator, schema))); }
public static Props Prop(EventsByTopic message, BufferBlock <IEventEnvelope> buffer) { return(Props.Create(() => new EventsByTopicActor(message, buffer))); }