public async Task HandleAsync(HttpContext context) { var sr = new StreamReader(context.Request.Body); var body = await sr.ReadToEndAsync(); var e = _eventStringSerializer.Deserialize(body); var jsonModel = _eventSerializer.Serialize(e); var minionTypeCode = _minionTypeCodes[e.ClaptrapIdentity.TypeCode]; var tasks = minionTypeCode.Select(async x => { var minionId = new ClaptrapIdentity(e.ClaptrapIdentity.Id, x); var actorProxy = _actorProxyFactory.Create(new ActorId(minionId.Id), minionId.TypeCode); await actorProxy.InvokeMethodAsync(nameof(IClaptrapMinionActor.MasterEventReceivedJsonAsync), new[] { jsonModel }); }); await Task.WhenAll(tasks); }
private async Task AsyncEventingBasicConsumerOnReceived(object sender, BasicDeliverEventArgs args, IClaptrapDesign minionDesign) { _logger.LogDebug("message received from rabbit mq, exchange : {exchange} ,routeKey : {routeKey}", args.Exchange, args.RoutingKey); var consumer = (IAsyncBasicConsumer)sender; consumer.Model.BasicAck(args.DeliveryTag, false); var payload = Decompress(args); var data = _messageSerializer.Deserialize(payload); var evt = _eventStringSerializer.Deserialize(data); var minionId = new ClaptrapIdentity(evt.ClaptrapIdentity.Id, minionDesign.ClaptrapTypeCode); var minionProxy = _minionLocator.CreateProxy(minionId); _logger.LogTrace("create minion proxy for {id}", minionId); await minionProxy.MasterEventReceivedAsync(new[] { evt }); _logger.LogDebug("a message sent to minion {minionId}", minionId); }