.NET中RabbitMQ的Topic型別Exchange的使用
阿新 • • 發佈:2018-12-24
Producter 傳送訊息程式碼:
/// <summary> /// 連線配置 /// </summary> private static readonly ConnectionFactory rabbitMqFactory = new ConnectionFactory(){ HostName ="192.168.1.8",UserName="hao",Password="abc123",Port= 5672 }; /// <summary> /// 路由名稱 /// </summary> const string TopExchangeName = "topic.justin.exchange"; //佇列名稱 const string TopQueueName = "topic.justin.queue"; public static void TopicExchangeSendMsg() { using (IConnection conn = rabbitMqFactory.CreateConnection()) { using (IModel channel = conn.CreateModel()) { channel.ExchangeDeclare(TopExchangeName, "topic", durable: false, autoDelete: false, arguments: null); channel.QueueDeclare(TopQueueName, durable: false, autoDelete: false, exclusive: false, arguments: null); channel.QueueBind(TopQueueName, TopExchangeName, routingKey: TopQueueName); //var props = channel.CreateBasicProperties(); //props.Persistent = true; string vadata = Console.ReadLine(); while (vadata != "exit") { var msgBody = Encoding.UTF8.GetBytes(vadata); channel.BasicPublish(exchange: TopExchangeName, routingKey: TopQueueName, basicProperties: null, body: msgBody); Console.WriteLine(string.Format("***傳送時間:{0},傳送完成,輸入exit退出訊息傳送", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"))); vadata = Console.ReadLine(); } } } }
Customer接收訊息程式碼:
/// <summary> /// 連線配置 /// </summary> private static readonly ConnectionFactory rabbitMqFactory = new ConnectionFactory() { HostName = "192.168.1.8", UserName = "hao", Password = "abc123", Port = 5672 }; /// <summary> /// 路由名稱 /// </summary> const string TopExchangeName = "topic.justin.exchange"; //佇列名稱 const string TopQueueName = "topic.justin.queue"; public static void TopicAcceptExchange() { using (IConnection conn = rabbitMqFactory.CreateConnection()) { using (IModel channel = conn.CreateModel()) { channel.ExchangeDeclare(TopExchangeName, "topic", durable: false, autoDelete: false, arguments: null); channel.QueueDeclare(TopQueueName, durable: false, autoDelete: false, exclusive: false, arguments: null); channel.BasicQos(prefetchSize: 0, prefetchCount: 1, global: false); channel.QueueBind(TopQueueName, TopExchangeName, routingKey: TopQueueName); var consumer = new EventingBasicConsumer(channel); consumer.Received += (model, ea) => { var msgBody = Encoding.UTF8.GetString(ea.Body); Console.WriteLine(string.Format("***接收時間:{0},訊息內容:{1}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), msgBody)); int dots = msgBody.Split('.').Length - 1; System.Threading.Thread.Sleep(dots * 1000); Console.WriteLine(" [x] Done"); channel.BasicAck(deliveryTag: ea.DeliveryTag, multiple: false); }; channel.BasicConsume(TopQueueName, noAck: false, consumer: consumer); Console.WriteLine("按任意值,退出程式"); Console.ReadKey(); } } }