public void Get(MessagingConfiguration messagingConfiguration, IRabbitMessageHandler messageHandler)
 {
     using (var messageConsumer = new TSubscriber())
     {
         messageConsumer.Get(messagingConfiguration, messageHandler);
     }
 }
Beispiel #2
0
        public void Consume(IRabbitMessageHandler messageHandler)
        {
            if (_rabbitConfiguration == null)
            {
                throw new ApplicationException("Rabbit configuration is missing.");
            }

            if (messageHandler == null)
            {
                throw new ArgumentNullException(nameof(messageHandler));
            }

            _consumer           = new EventingBasicConsumer(_channel);
            _consumer.Received += (model, result) =>
            {
                try
                {
                    _channel.BasicAck(result.DeliveryTag, false);
                    messageHandler.Handle(model, result);
                }
                catch (Exception ex)
                {
                    //Log exception
                }
            };

            _channel.BasicConsume(_rabbitConfiguration.Queue, false, _consumer);
        }
        public void Get(string exchange, string queue, IRabbitMessageHandler messageHandler, string routingKey = "", string type = "fanout", bool durable = false)
        {
            var rabbitConfiguration = new RabbitConfiguration(_connectionFactory, exchange, routingKey, type, durable, queue);

            using (var messageConsumer = new TConsumer())
            {
                messageConsumer.Setup(rabbitConfiguration).Get(messageHandler);
            }
        }
        public Guid Subscribe(MessagingConfiguration messagingConfiguration, IRabbitMessageHandler messageHandler)
        {
            var consumer   = new TSubscriber();
            var consumerId = Guid.NewGuid();

            _consumers.TryAdd(consumerId, consumer);
            consumer.Consume(messagingConfiguration, messageHandler);

            return(consumerId);
        }
Beispiel #5
0
 public BatchSubscriptionHost(
     IObservableConnection connection,
     IRabbitMessageHandler <IEnumerable <T> > handler,
     IBatchSubscriptionConfig config, ILogger logger
     //            ,
     //            IEnumerable<IBatchRabbitMessageInterceptor<T>> interceptors
     )
 {
     logger.InfoFormat("Subscribing handler: {0} with Id {1}", config.Name, config.Id);
     Subscription = connection.SubscribeOnQueueToMessage(config, handler);
 }
        public Guid Subscribe(string exchange, string queue, IRabbitMessageHandler messageHandler, string routingKey = "", string type = "fanout", bool durable = false)
        {
            var rabbitConfiguration = new RabbitConfiguration(_connectionFactory, exchange, routingKey, type, durable, queue);
            var consumer            = new TConsumer();
            var consumerId          = Guid.NewGuid();

            _consumers.TryAdd(consumerId, consumer);
            consumer.Setup(rabbitConfiguration).Consume(messageHandler);

            return(consumerId);
        }
        public void Get(MessagingConfiguration messagingConfiguration, IRabbitMessageHandler messageHandler)
        {
            SetupChannel(messagingConfiguration);

            var result = _channel.BasicGet(messagingConfiguration.QueueName, true);

            while (result != null)
            {
                messageHandler.Handle(result);
                result = _channel.BasicGet(messagingConfiguration.QueueName, true);
            }
        }
Beispiel #8
0
        public void Get(IRabbitMessageHandler messageHandler)
        {
            if (_rabbitConfiguration == null)
            {
                throw new ApplicationException("Rabbit configuration is missing.");
            }

            var result = _channel.BasicGet(_rabbitConfiguration.Queue, true);

            while (result != null)
            {
                messageHandler.Handle(result);
                result = _channel.BasicGet(_rabbitConfiguration.Queue, true);
            }
        }
        public void Consume(MessagingConfiguration messagingConfiguration, IRabbitMessageHandler messageHandler)
        {
            SetupChannel(messagingConfiguration);

            _consumer           = new EventingBasicConsumer(_channel);
            _consumer.Received += (model, result) =>
            {
                try
                {
                    _channel.BasicAck(result.DeliveryTag, false);
                    messageHandler.Handle(model, result);
                }
                catch (Exception ex)
                {
                    //Log exception
                }
            };

            _consumerTag = _channel.BasicConsume(messagingConfiguration.QueueName, false, _consumer);
        }
Beispiel #10
0
        public string Listening()
        {
            string strMessage = "";

            _cts    = new CancellationTokenSource();
            running = true;
            foreach (var type in queueTypeMap.Keys)
            {
                Task.Factory.StartNew(() =>
                {
                    MessageSyncTypeMapInfo mapInfo;
                    queueTypeMap.TryGetValue(type, out mapInfo);
                    using (var client = clientFactory.Create(mapInfo.QueueName, mapInfo.ExchangeName, mapInfo.ExchangeType))
                    {
                        client.OnMessageReceived += (sender, e) =>
                        {
                            HandleResponse response            = null;
                            System.Diagnostics.Stopwatch watch = new System.Diagnostics.Stopwatch();
                            watch.Start();
                            string message = System.Text.Encoding.UTF8.GetString(e.Body);
                            try
                            {
                                IRabbitMessageHandler handler = IocManager.Resolve <IRabbitMessageHandler>(type);
                                response = handler.HandleRabbitMessage(message);
                                //strMessage += message;
                                Loger.Write(message);
                            }

                            catch (Exception ex)
                            {
                                response           = new HandleResponse(HandleResult.失败, ex.Message);
                                response.Exception = ex;
                            }

                            switch (response.Result)
                            {
                            case HandleResult.成功:
                            case HandleResult.处理:
                                break;

                            default:
                                //包装为原消息同步接口格式,可以通过老工具进行二次处理

                                break;
                            }
                            //不管成功还是失败,都发送ack, 异常消息手动处理。
                            client.Commit();
                        };
                        client.OnError += (sender, e) =>
                        {
                        };
                        client.Subscribe(mapInfo.RountingKeys);
                        client.Listening(_pollingDelay, _cts.Token);
                    }
                }, _cts.Token, TaskCreationOptions.LongRunning, TaskScheduler.Default).ContinueWith(task =>
                {
                    if (task.Exception != null && task.Exception.InnerExceptions != null & task.Exception.InnerExceptions.Count > 0)
                    {
                        var innerException = task.Exception.InnerExceptions[0];
                    }
                },
                                                                                                    TaskContinuationOptions.OnlyOnFaulted);
            }
            _compositeTask = Task.WhenAll();
            return(strMessage);
        }
 public PipelineDescriptor Use(IRabbitMessageHandler handler)
 {
     this.rabbitMessageHandlers.Add(handler);
     return(this);
 }
Beispiel #12
0
 public static string GetGenericTypeName <TMessage>(IRabbitMessageHandler <TMessage> handler) where TMessage : IMessage
 {
     return(handler.GetType().GetGenericArguments()[0].ToString());
 }
Beispiel #13
0
 public static IDisposable SubscribeOnQueueToMessage <T>(this IObservableConnection connection, IBatchSubscriptionConfig config, IRabbitMessageHandler <IEnumerable <T> > handler)
 {
     return(SubscribeWithAck(connection.Queue(config.QueueName)
                             .Open()
                             .Stream <T>()
                             .Buffer(config.BufferTimeout, config.BufferSize)
                             .Where(m => m.Any())
                             .Select(l => l.AsEnumerable()), l =>
     {
         var rabbitMessages = l.ToArray();
         handler.Handle(rabbitMessages.Select(m => m.Message));
     }));
 }
Beispiel #14
0
 public static IDisposable SubscribeOnQueueToMessage <T>(this IObservableConnection connection, ISubscriptionConfig config, IRabbitMessageHandler <T> handler)
 {
     return(connection.Queue(config.QueueName)
            .Open()
            .Stream <T>()
            .SubscribeWithAck(rm => { handler.Handle(rm.Message); }));
 }
Beispiel #15
0
 public static IDisposable SubscribeOnQueueToMessage <T>(this IObservableConnection connection, string exchange, string subscriberQueue, IRabbitMessageHandler <T> handler)
 {
     return(connection.SubscribeOnQueueToMessage(new DefaultSubscriptionConfig(subscriberQueue), handler));
 }
 internal PipelineDescriptor UseFirst(IRabbitMessageHandler handler)
 {
     this.rabbitMessageHandlers.Insert(0, handler);
     return(this);
 }
Beispiel #17
0
        public static TMessage GetData <TMessage>(this IRabbitMessageHandler <TMessage> handler, byte[] body) where TMessage : IMessage
        {
            string jsonBody = Encoding.UTF8.GetString(body);

            return(JsonSerializer.DeserializeFromString <TMessage>(jsonBody));
        }