private void Subscribe <TService>(QuSpecAttribute quSpec, IEnumerable <TService> svcs, Func <string, IBasicProperties, IEnumerable <TService>, Task> processEvent) where TService : class { ListeningChannel.QueueDeclare(quSpec.Queue, quSpec.Durable, quSpec.Exclusive, quSpec.AutoDelete, null); var consumer = new AsyncEventingBasicConsumer(ListeningChannel); //consumer.Received += ConsumerReceived; consumer.Received += async(sender, e) => { //e.BasicProperties.ReplyTo; //var eventName = e.RoutingKey; var msgText = Encoding.UTF8.GetString(e.Body); try { await processEvent(msgText, e.BasicProperties, svcs).ConfigureAwait(false); } catch (Exception err) { if (TheLogger != null) { TheLogger.LogError(err.Message); } throw; } }; ListeningChannel.BasicConsume(quSpec.Queue, true, consumer); }
private IQuCorrleation RegistQuReslut(MethodInfo methodInfo, QuSpecAttribute queueSpec, QuMsg msg, out bool immediatelyWaitRasult) { immediatelyWaitRasult = !typeof(IQuCorrleation).IsAssignableFrom(methodInfo.ReturnType); //if (immediatelyWaitRasult) return null; //var type=typeof(QuResult<>).MakeGenericType(methodInfo.ReturnType.GetGenericArguments()); IQuCorrleation quRlt = (immediatelyWaitRasult)?new QuResult(): Activator.CreateInstance(methodInfo.ReturnType) as IQuCorrleation; quRlt.CorrleationId = string.IsNullOrEmpty(msg.CorrleationId)?msg.Id:msg.CorrleationId; //quResultMap ??= new Dictionary<string, IQuCorrleation>(); //lock (this) // quResultMap[quRlt.CorrleationId] = quRlt; return(quRlt); }
/// <summary> /// /// </summary> internal void Subscribe <TService>(TService svc, QuSpecAttribute quSpec) where TService : class { Subscribe <TService>(quSpec, new TService[] { svc }, ProcessEvent); }