public void Close( ) { try { if (ListenChannel != null) { ListenChannel.Close( ); } ListenChannel = null; CloseData( ); } catch (IOException ioe) { Log.w("ddms", ioe); } }
/// <summary> /// 接收到消息触发事件 /// </summary> /// <param name="sender"></param> /// <param name="args"></param> private void Consumer_Received(object sender, BasicDeliverEventArgs args) { try { var body = args.Body; var message = Encoding.UTF8.GetString(body); //将消息业务处理交给外部业务 bool result = ReceiveMessageCallback(message); if (result) { if (ListenChannel != null && !ListenChannel.IsClosed) { ListenChannel.BasicAck(args.DeliveryTag, false); } } else { } } catch (Exception ex) { throw ex; } }
/// <summary> /// 消费信息 /// </summary> /// <param name="queueName"></param> public void Consume() { var factory = RabbitMQFactory.Instance.CreateFactory(); var connection = factory.CreateConnection(); connection.ConnectionShutdown += Connection_ConnectionShutdown; ListenChannel = connection.CreateModel(); bool autoDeleteMessage = false; var queue = ListenChannel.QueueDeclare(_queueName, RabbitMQConfig.IsDurable, false, false, null); //公平分发,不要同一时间给一个工作者发送多于一个消息 ListenChannel.BasicQos(0, 1, false); //创建事件驱动的消费者类型,不要用下边的死循环来消费消息 var consumer = new EventingBasicConsumer(ListenChannel); consumer.Received += Consumer_Received; //消费消息 ListenChannel.BasicConsume(_queueName, autoDeleteMessage, consumer); }