Rabbitmq交换机备份

 

using Microsoft.VisualStudio.TestTools.UnitTesting;
using RabbitMQ.Client;
using RabbitMQ_Consumer;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace RabbitMQTests.Reliability
{
    /// <summary>
    /// 使用交换机备份
    /// </summary>
    ///
    [TestClass]
    public class BackupExchange
    {
        [TestMethod]
        public void BackupMethod()
        {
            string queueName = "BACKUP_QUEUE";
            string exchangeName = "BACKUP_EXCHANGE";
            string backupQueue = "BACKUP_QUEUE_D";
            string backupExchangeName = "ALTERNATE_EXCHNAGE";
            string routeKey = "BACKUP_ROUTEKEY";
            using (var connection = RabbitMQHelper.GetConnection("192.168.3.200", 5671))
            {
                using (var channel = connection.CreateModel())
                {
                    // 声明交互交换机[指定备份交换机]
                    Dictionary<string, object> argument = new ();
                    argument.Add("alternate-exchange", backupExchangeName);
                    channel.ExchangeDeclare(exchangeName, ExchangeType.Direct, false, false, argument);
                    // 声明备份交互机
                    channel.ExchangeDeclare(backupExchangeName, ExchangeType.Fanout, false, false, null);
                    // 声明队列
                    channel.QueueDeclare(queueName, false, false, false, null);
                    // 声明备份队列
                    channel.QueueDeclare(backupQueue, false, false, false, null);

                    // 绑定队列
                    channel.QueueBind(queueName, exchangeName, routeKey);
                    channel.QueueBind(backupQueue, backupExchangeName, "");
                    
                    //发送数据
                    for (int i = 0; i < 10; i++)
                    {
                        // 消息内容
                        string message = "This is Backup Exchange Model-->"+i;
                        var body = Encoding.UTF8.GetBytes(message);
                        //指定发送消息到哪个路由,以及他的路由键,消息等
                        if (i % 2 == 0)
                        {
                            channel.BasicPublish(exchangeName, routeKey, null, body);
                        }
                        else
                        {
                            //匹配不到队列[如果路由key找不到队列则启用备用交换机]
                            channel.BasicPublish(exchangeName, "kkkk", null, body);
                        }
                        Console.WriteLine(" [x] Sent '" + message + "'");
                        Thread.Sleep(200);
                    }
                }
            }
        }
    }
    
}

  

posted on 2024-08-09 10:54  是水饺不是水饺  阅读(6)  评论(0)    收藏  举报

导航