/// <summary> /// /// </summary> /// <param name="sender"></param> /// <param name="e">[0]queue name ; [1] callback method</param> private void bgwConsume_DoWork(object sender, DoWorkEventArgs e) { Console.WriteLine("bgwConsume_DoWork Done!"); object[] param = (object[])e.Argument; var factory = new ConnectionFactory(); //サーバー名 factory.HostName = "godpubtest"; //RabbitServerのユーザー名 factory.UserName = "******"; //RabbitServerのパスワード factory.Password = "******"; using (var connection = factory.CreateConnection()) { using (var channel = connection.CreateModel()) { //Useage:③ //channel.ExchangeDeclare(exchange: exchangeName, type: "fanout"); // Temporary queues var queueName = (string)param[0]; if (queueName.Contains("Prority")) { //Bindings With Arguments IDictionary <String, Object> args = new Dictionary <String, Object>(); args.Add("x-max-priority", 5); channel.QueueDeclare(queue: queueName, durable: true, exclusive: false, autoDelete: false, arguments: args); } else { // Bindings channel.QueueDeclare(queue: queueName, durable: true, exclusive: false, autoDelete: false, arguments: null); } var consumer = new EventingBasicConsumer(channel); consumer.Received += (ch, ea) => { var body = SerializeTool.GetBody(ea.Body); IBasicProperties basicProperties = ea.BasicProperties; Console.WriteLine("Message received by the event based consumer. Check the debug window for details."); Debug.WriteLine("------------------------------------------------------------------"); Debug.WriteLine(string.Concat("Message received from the exchange ", ea.Exchange)); Debug.WriteLine(string.Concat("Content type: ", basicProperties.ContentType)); Debug.WriteLine(string.Concat("Consumer tag: ", ea.ConsumerTag)); Debug.WriteLine(string.Concat("Delivery tag: ", ea.DeliveryTag)); Debug.WriteLine(string.Concat("Message id: ", body.MsgID)); Debug.WriteLine(string.Concat("Message: ", body.MsgContent)); AddNewMessage a = (AddNewMessage)param[1]; this.Invoke(a, body); // 如果 channel.BasicConsume 中参数 noAck 设置为 false,必须加上消息确认语句 // Message acknowledgment(消息确认机制作用) channel.BasicAck(ea.DeliveryTag, false); }; try { string consumeID = channel.BasicConsume(queue: queueName, autoAck: false,/* Message acknowledgment(消息确认机制) */ consumer: consumer); Console.WriteLine(" Consume ID={0}", consumeID); while (isListening) { //Console.WriteLine(" Consume status={0}", consumer.IsRunning); } } catch (Exception ex) { Debug.WriteLine("Consume Register Failure:{0}", ex.Message); } } } }