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);
}
}
}
}
}
}