private void ReceiveMessage(MqQueueName queueName, Action<string> action) { IModel channel = null; try { if (_connection == null || !_connection.IsOpen) NewConnection(); //创建通道 channel = _connection.CreateModel(); //创建队列 channel.QueueDeclare(queueName.ToString(), true, false, false, null); channel.BasicQos(0, 1, false); var consumer = new QueueingBasicConsumer(channel); channel.BasicConsume(queueName.ToString(), false, consumer); while (true) { string message = ""; try { var ea = consumer.Queue.Dequeue(); message = Encoding.UTF8.GetString(ea.Body); //处理消息 action(message); //发送确认回执 channel.BasicAck(ea.DeliveryTag, false); } catch (Exception ex) { LogHelper.Fatal("RabbitMQ消费者处理消息失败。消息内容:" + queueName + "," + message, ex); } } } catch (Exception ex) { LogHelper.Fatal("RabbitMQ接收和解析消息失败。", ex); } finally { if (channel != null) { channel.Close(); } } }