Example #1
0
        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);
        }
Example #2
0
        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);
        }
Example #3
0
 /// <summary>
 ///
 /// </summary>
 internal void Subscribe <TService>(TService svc, QuSpecAttribute quSpec)
     where TService : class
 {
     Subscribe <TService>(quSpec, new TService[] { svc }, ProcessEvent);
 }