close

using Newtonsoft.Json.Linq;
using RabbitMQ.Client;
using RabbitMQ.Client.Events;
using System;
using System.Configuration;
using System.Linq;
using System.Text;
using System.IO;
using System.Collections;
using Newtonsoft.Json;
using System.Net;
using System.Net.Security;
using System.Security.Cryptography.X509Certificates;
using System.Collections.Specialized;
using System.Threading;
using static System.String;

namespace AMSConsole
{
    class Program
    {
        static void Main(string[] args)
        {
            //設定連線 初始化RabbitMQ連線資訊
            var factory = new ConnectionFactory();
            factory.UserName = QueueUser;
            factory.Password = QueuePassword;
            factory.VirtualHost = QueueVirtualHost;

            try
            {
                //連線多個RabbitMQ instance(cluster)
                using (var connection =
                        factory.CreateConnection(
                            AmqpTcpEndpoint.ParseMultiple(QueueServer))) //AmqpTcpEndpoint.ParseMultiple(QueueServer)
                    //開啟channel
                using (var channel = connection.CreateModel())
                {
                    //channel.QueueDeclare(queue: QueueName, durable: true, exclusive: false, autoDelete: false, arguments: null);

                    //處理連線中斷
                    connection.ConnectionShutdown += (o, e) =>
                    {
                        //handle disconnect
                        Console.WriteLine($"Fail to connect:{0},{e}");
                    };

                    Console.WriteLine(" [*] Waiting for messages.");
                    ConsoleLog("", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " [*] Waiting for messages.", "");

                    //建立consumer
                    var consumer = new EventingBasicConsumer(channel);

                    //接收指定Queue訊息, autoAck: false 處理完才反饋已接收, 若為true則consume後直接就從Queue消失(Acked)
                    channel.BasicConsume(queue: QueueName, autoAck: false, consumer: consumer);

                    //收到訊息處理方式
                    consumer.Received += (model, ea) =>
                    {
                        var body = ea.Body.ToArray();
                        var message = Encoding.UTF8.GetString(body);
                        Console.WriteLine(" [x] Received {0}.", message);
                        ConsoleLog("", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " [x] Received {0}.", message);
                        if (!IsNullOrEmpty(message))
                        {
                        }

                        //手動Ack

                        channel.BasicAck(deliveryTag: ea.DeliveryTag, multiple: false);
                        ConsoleLog("", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "BasicAck the message.", "");
                        Thread.Sleep(1000);
                    };

                    Console.WriteLine(" Press [enter] to exit.");
                    Console.ReadLine();
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("Error:" + ex.Message);
                ConsoleLog("Error", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " Error:" + ex.Message, "");
            }
        }
    }
}

arrow
arrow
    文章標籤
    C# RabbitMQ
    全站熱搜

    程式小試身手 發表在 痞客邦 留言(0) 人氣()