111,098
社区成员




public static void CosumeMessage<T>(IConnection conn, string exchangeName, string exchangeType, string queueName, bool durable, bool autoDelete, bool exclusive, string routingKey, Action<T> action)
{
IModel channel = conn.CreateModel();
bool noAck = false;
channel.ExchangeDeclare(exchangeName, exchangeType, durable, autoDelete, null);
channel.QueueDeclare(queueName, durable, autoDelete, exclusive, arguments: null);
channel.QueueBind(queueName, exchangeName, routingKey, null);
channel.BasicQos(0, 1, false);
var consumer = new EventingBasicConsumer(channel);
consumer.Received += (ch, ea) =>
{
try
{
var body = ea.Body;
IBasicProperties props = ea.BasicProperties;
string message = Encoding.UTF8.GetString(body);
T tmp = message.FromJsv<T>();
if (action != null)
{
action(tmp);
channel.BasicAck(deliveryTag: ea.DeliveryTag, multiple: false);
}
else
{
channel.BasicReject(deliveryTag: ea.DeliveryTag, requeue: true);
}
}
catch (Exception e)
{
channel.BasicReject(deliveryTag: ea.DeliveryTag, requeue: true);
LogUtil.WriteWorkflowLog("Cosume failed", e);
}
};
channel.BasicConsume(queueName, noAck, consumer);
}