无法手动应答模式,因为RabbitMQ已提前关闭!
try
{
string queueName = "UnOpenMyCodeQueue";
string exchange = "UnOpenMyCodeExchange";
using (var con = this._rabbit.CreateConnection())
{
using (var channel = con.CreateModel())
{
channel.ExchangeDeclare(exchange, "direct", durable: true, autoDelete: false, arguments: null);
channel.QueueDeclare(queue: queueName,
durable: true,
exclusive: false,
autoDelete: false,
arguments: null);
channel.QueueBind(queue: queueName,
exchange: exchange,
routingKey: queueName);
//输入1,那如果接收一个消息,但是没有应答,则客户端不会收到下一个消息
channel.BasicQos(0,1,false);
var consumer = new EventingBasicConsumer(channel);
consumer.Received += (model, ea) =>
{
try {
var body = ea.Body;
var message = Encoding.UTF8.GetString(body);
Do(message);//业务逻辑处理
this._logger.LogInformation("GetOhterBizConsumeData got msg:" + message);
}
catch (Exception exp)
{
this._logger.LogError("GetOhterBizConsumeDatae接受消息异常:"+exp.Message+exp.StackTrace);
}
finally {
channel.BasicAck(ea.DeliveryTag, false);
this._logger.LogInformation("channel.BasicAck is done");
}
};
bool autoAck = false;
channel.BasicConsume(queue: queueName,
noAck: autoAck,
consumer: consumer);
}
}
}
catch (Exception e)
{
this._logger.LogInformation("GetConsumeData异常" + e.Message + e.StackTrace);
}