示例#1
0
        static void Main(string[] args)
        {
            var factory = new ConnectionFactory();

            factory.HostName = "127.0.0.1";
            factory.UserName = "******";
            factory.Password = "******";

            using (var connection = factory.CreateConnection())
            {
                using (var channel = connection.CreateModel())
                {
                    //创建队列
                    channel.QueueDeclare("consume-queue-orderOverTime", true, false, false, null);
                    //绑定消费者到哪个队列
                    var consumer = new EventingBasicConsumer(channel);
                    channel.BasicConsume("consume-queue-orderOverTime", false, consumer);
                    consumer.Received += (model, ea) =>
                    {
                        //Thread.Sleep(1000 * 2);
                        var body    = ea.Body.ToArray();
                        var message = Encoding.UTF8.GetString(body);
                        Console.WriteLine("已接收: {0}", message);
                        //设置手动确认
                        channel.BasicAck(ea.DeliveryTag, false);
                    };
                    //手动确认OK
                    consumer.HandleBasicConsumeOk("ok");
                    Console.ReadLine();
                }
            }
        }
        /// <inheritdoc />
        protected override Task ExecuteAsync(CancellationToken stoppingToken)
        {
            stoppingToken.Register(Shutdown);

            var consumer = new EventingBasicConsumer(Channel);

            Channel.DefaultConsumer = consumer;
            consumer.HandleBasicConsumeOk("blah");
            consumer.Received += (ch, ea)
                                 =>
            {
                Log.Information(
                    "Received {@content} as consumer {@consumer}",
                    Encoding.UTF8.GetString(ea.Body),
                    ea.ConsumerTag);
                Channel.BasicAck(ea.DeliveryTag, false);
            };

            var address = new PublicationAddress(ExchangeType.Fanout, "demo.exchange", "demo.queue.hello");

            Channel.BasicPublish(address, null, Encoding.UTF8.GetBytes("Client online!"));
            Channel.BasicConsume("demo.queue", false, consumer);

            return(Task.CompletedTask);
        }
示例#3
0
        public Task Subscribe(string queue, string exchange, IEventProcessor processor, RabbitConsumeOptions options)
        {
            this.Exchange  = exchange;
            this.Queue     = queue;
            this.Processor = processor;
            this.Options   = options;

            lock (this._channel)
            {
                //Subscription processing
                this._channel.Model.ExchangeDeclare(this.Exchange, ExchangeType.Direct, true);
                this._channel.Model.QueueDeclare(this.Queue, true, false, false, null);
                this._channel.Model.QueueBind(this.Queue, this.Exchange, this.Exchange);
                this._channel.Model.BasicQos(0, options.OneFetchCount, false);
                this._channel.Model.CallbackException += Channel_CallbackException;

                //Consumer reports in the channel
                var basicConsumer = new EventingBasicConsumer(this._channel.Model);
                basicConsumer.Received += async(ch, ea) =>
                {
                    await Process(ea);
                };

                basicConsumer
                .HandleBasicConsumeOk(this._channel.Model.BasicConsume(this.Queue, options.AutoAck,
                                                                       basicConsumer));
            }

            return(Task.CompletedTask);
        }