# RabbitMQ_Demo **Repository Path**: ldhnet/RabbitMQ ## Basic Information - **Project Name**: RabbitMQ_Demo - **Description**: 基于DotNet 6 实现的RabbitMQ demo 开箱即用,MQ 解耦,异步,削峰等实用利器。 从https://github.com/ldhnet迁移到gitee平台 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: https://github.com/ldhnet - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 0 - **Created**: 2018-03-15 - **Last Updated**: 2024-06-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: dotNET ## README

RabbitMQDemo

public RabbitMQManager(IOptionsMonitor options) { _options = options.CurrentValue; var factory = new ConnectionFactory() { HostName = _options.HostName, UserName = _options.UserName, Password = _options.Password }; factory.AutomaticRecoveryEnabled = true; //设置端口后 自动恢复连接属性即可 //创建连接 _connection = factory.CreateConnection(); } public void Consume(string queueName, string routeKey, Action action) where T : class { //创建通道 var channel = _connection.CreateModel(); //声明一个队列 (durable=true 持久化消息) channel.QueueDeclare(queueName, true, false, false, null); if (!string.IsNullOrEmpty(_options.ExchangeName)) { channel.ExchangeDeclare(_options.ExchangeName, _options.ExchangeType, true, false, null); //将队列绑定到交换机 channel.QueueBind(queueName, _options.ExchangeName, routeKey, null); } channel.BasicQos(prefetchSize: 0, prefetchCount: 1, global: false); var consumer = new EventingBasicConsumer(channel); consumer.Received += (model, ea) => { var body = ea.Body; var message = Encoding.UTF8.GetString(body); var obj = JsonConvert.DeserializeObject(message); try { action?.Invoke(obj); } catch (Exception ex) { throw ex; } channel.BasicAck(deliveryTag: ea.DeliveryTag, multiple: false); }; channel.BasicConsume(queue: queueName, autoAck: false, consumer: consumer); } public void Publish(T message, string queueName, string routeKey) { if (message == null || string.IsNullOrWhiteSpace(queueName)) return; //创建通道 var channel = _connection.CreateModel(); //声明一个队列 (durable=true 持久化消息) channel.QueueDeclare(queueName, true, false, false, null); if (!string.IsNullOrEmpty(_options.ExchangeName)) { channel.ExchangeDeclare(_options.ExchangeName, _options.ExchangeType, true, false, null); //将队列绑定到交换机 channel.QueueBind(queueName, _options.ExchangeName, routeKey, null); } var sendBytes = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(message)); var properties = channel.CreateBasicProperties(); properties.Persistent = true; channel.BasicPublish(_options.ExchangeName, routeKey, properties, sendBytes); }