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); }
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); }