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, "");
}
}
}
}
留言列表