/// <summary> /// 消费消息 /// </summary> /// <returns></returns> public void GetMessage() { Task.Factory.StartNew(() => { try { using (connection = RabbitMQCore.connectionFactory.CreateConnection()) { using (IModel channel = connection.CreateModel()) { channel.QueueDeclare(queue: RabbitMQCore.QueueName, durable: true, exclusive: false, autoDelete: false, arguments: null); channel.BasicQos(0, 1, false); //公平分发 为了改变这一状态,我们可以使用basicQos方法,设置perfetchCount=1 。这样就告诉RabbitMQ 不要在同一时间给一个工作者发送多于1个的消息 var consumer = new EventingBasicConsumer(channel); consumer.Received += RabbitMQCore.ConsumerReceived; //接收到消息执行操作 consumer.Received += (model, ea) => { channel.BasicAck(ea.DeliveryTag, false);//返回ACK }; channel.BasicConsume(queue: RabbitMQCore.QueueName, autoAck: false, consumer: consumer); while (true)//让消息一直连接 { Thread.Sleep(1000); } } } } catch (Exception) { if (!RabbitMQCore.IsConnected) { RabbitMQCore.TryConnect(); } } }); }
/// <summary> /// 发送消息 /// </summary> /// <param name="message">消息</param> /// <param name="persistent">是否持久化</param> public void SendMessage(string message, bool persistent = true) { try { using (connection = RabbitMQCore.connectionFactory.CreateConnection()) { using (IModel channel = connection.CreateModel()) { var props = channel.CreateBasicProperties(); if (persistent == true) { props.Persistent = true;//持久化到硬盘 } var messageBody = Encoding.UTF8.GetBytes(message); channel.BasicPublish(exchange: RabbitMQCore.ExchangName, routingKey: RabbitMQCore.QueueName, basicProperties: props, body: messageBody); } } } catch (Exception) { if (!RabbitMQCore.IsConnected) { RabbitMQCore.TryConnect(); } } }