rabbitmq for C#的異步消息確認機制


代碼:

using (var conn = RabbitmqHelper.GetConnection())
            {
                using (var channel = conn.CreateModel())
                {
                    //這兩個事件如果是using寫法要寫到創建交換器和隊列並且進行綁定之前,否則不會觸發
                    channel.BasicNacks += (sender, e) =>
                    {
                        //生產者發送消息到broker(服務器)后失敗被生產者的listener監聽到,就走無應答方法
                        Console.WriteLine(" --no ack-- ");
                    };

                    channel.BasicAcks += (sender, e) =>
                    {
                        //有應答
                        Console.WriteLine(" --ack-- ");
                    };

                    channel.ExchangeDeclare("log_topic", ExchangeType.Topic);
                    var msg = $"send {(args.Length == 0 ? "default" : args[0] ?? "default")} topic message";
                    var body = Encoding.UTF8.GetBytes(msg);
                    channel.ConfirmSelect();//不管是串行還是並行,都要加入聲明確認這句話
                    channel.BasicPublish("log_topic", (args.Length < 1 ? "#" : args[1] ?? "#"), null, body);
                    Console.WriteLine(" [x] Sent {0}", msg);
                    //串行的寫法
                    //if (channel.WaitForConfirms())
                    //{
                    //    Console.WriteLine("[x] Sent success");
                    //}
                    //else
                    //{
                    //    Console.WriteLine("[x] Sent faild");
                    //}
                    Console.WriteLine(" Press [enter] to exit.");
                    Console.ReadLine();
                }
            }

 更多應答出現的問題:

https://blog.csdn.net/youbl/article/details/80425959


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM