Example #1
0
        public void Subscribe(IConnection connection, IRabbitMQBodySerializer serializer, CancellationToken stoppingToken)
        {
            if (connection == null)
            {
                throw new ArgumentNullException();
            }

            if (serializer == null)
            {
                throw new ArgumentNullException();
            }

            this.bodySerializer = serializer;

            Task.Run(async() =>
            {
                await createChannel(connection, stoppingToken);

                stoppingToken.Register(shutdownProcedure);



                var queueName = channel.QueueDeclare(QueueName, Durable, Exclusive, AutoDelete);

                var messageConsumer = new EventingBasicConsumer(channel);

                messageConsumer.Received += handleReceivedMessage;


                channel.BasicConsume(
                    queue: queueName,
                    autoAck: AutoAck,
                    consumer: messageConsumer
                    );

                channel.BasicQos(prefetchSize: 0, prefetchCount: 1, global: false);

                if (Exchange.Equals("") || RoutingKey.Equals(""))
                {
                    return;
                }

                channel.QueueBind(
                    queue: queueName,
                    routingKey: RoutingKey,
                    exchange: Exchange,
                    arguments: null
                    );
            });
        }
        public void ExecuteCallback(IRabbitMQBodySerializer serializer, byte[] body)
        {
            var obj = serializer.GetObject <T>(body);

            ResponseCallback?.Invoke(obj);
        }