RabbitMQ随手笔记(十二)备份交换器(.netCore2.0)
2018-03-17 11:14
260 查看
备份交换器,AlternateExchange(AE);
备份交换器是为了实现没有路由到队列的消息,与上篇介绍到的mandatory都是为了处理没有路由到的消息。
AE相对于mandatory逻辑更简单,不需要另外实现basic.Return,但是要另外设置一个Exchange,指向默认队列,消费该默认队列的消费者,处理接收到的消息。 ConnectionFactory factory = new ConnectionFactory();
factory.HostName = IP_ADDRESS;
factory.Port = PORT;
factory.UserName = USER_NAME;
factory.Password = PASSWORD;
con = factory.CreateConnection();
channel = con.CreateModel();
//备份交换器
Dictionary<string, object> args = new Dictionary<string, object>();
args.Add("alternate-exchage", "myAe");
channel.ExchangeDeclare(EXCHANGE_NAME, "topic", true, false, args);
channel.ExchangeDeclare("myAe", "fanout", true, false, null);//myAe的类型是fanout,没有路由的
//主队列
channel.QueueDeclare(QUEUE_NAME, true, false, false, null);
channel.QueueBind(QUEUE_NAME, EXCHANGE_NAME, BINDING_KEY, null);
//备份队列
channel.QueueDeclare("unroutedQueue", true, false, false, null);
channel.QueueBind("unroutedQueue", "myAe", null);//myAe的类型是fanout,没有路由的
string message = "Hello Word!";
var body = Encoding.UTF8.GetBytes(message);
var properties = channel.CreateBasicProperties();
properties.Persistent = true;
//如果交换器EXCHANGE_NAME根据ROUTING_KEY找到对应的队列,则发送给对应的队列
//如果交换器EXCHANGE_NAME根据ROUTING_KEY没有找到对应的队列,则发送给交换器myAe
channel.BasicPublish(EXCHANGE_NAME, ROUTING_KEY, properties, body);
备份交换器是为了实现没有路由到队列的消息,与上篇介绍到的mandatory都是为了处理没有路由到的消息。
AE相对于mandatory逻辑更简单,不需要另外实现basic.Return,但是要另外设置一个Exchange,指向默认队列,消费该默认队列的消费者,处理接收到的消息。 ConnectionFactory factory = new ConnectionFactory();
factory.HostName = IP_ADDRESS;
factory.Port = PORT;
factory.UserName = USER_NAME;
factory.Password = PASSWORD;
con = factory.CreateConnection();
channel = con.CreateModel();
//备份交换器
Dictionary<string, object> args = new Dictionary<string, object>();
args.Add("alternate-exchage", "myAe");
channel.ExchangeDeclare(EXCHANGE_NAME, "topic", true, false, args);
channel.ExchangeDeclare("myAe", "fanout", true, false, null);//myAe的类型是fanout,没有路由的
//主队列
channel.QueueDeclare(QUEUE_NAME, true, false, false, null);
channel.QueueBind(QUEUE_NAME, EXCHANGE_NAME, BINDING_KEY, null);
//备份队列
channel.QueueDeclare("unroutedQueue", true, false, false, null);
channel.QueueBind("unroutedQueue", "myAe", null);//myAe的类型是fanout,没有路由的
string message = "Hello Word!";
var body = Encoding.UTF8.GetBytes(message);
var properties = channel.CreateBasicProperties();
properties.Persistent = true;
//如果交换器EXCHANGE_NAME根据ROUTING_KEY找到对应的队列,则发送给对应的队列
//如果交换器EXCHANGE_NAME根据ROUTING_KEY没有找到对应的队列,则发送给交换器myAe
channel.BasicPublish(EXCHANGE_NAME, ROUTING_KEY, properties, body);
相关文章推荐
- RabbitMQ随手笔记(二)RabbitMQ-"Hello World" 之生产者(netCore2.0)
- RabbitMQ随手笔记(十一)mandatory参数(.netCore2.0)
- RabbitMQ随手笔记(十三)TTL(.netCore2.0)
- RabbitMQ随手笔记(十五)持久化(.netCore2.0)
- RabbitMQ随手笔记(三)RabbitMQ-“Hello World” 之消费者(.netCore2.0)
- RabbitMQ随手笔记(四)连接RabbitMQ (.netCore2.0)
- RabbitMQ随手笔记(五)交换器和队列(.netCore2.0)
- RabbitMQ随手笔记(六)发送消息(.netCore2.0)
- RabbitMQ随手笔记(九)RabbitMQ实现RPC(netCore2.0)
- RabbitMQ随手笔记(八)消费者端确认和拒绝(netCore2.0)
- [翻译]Scott Mitchell 的ASP.NET 2.0数据教程之十二:在GridView控件中使用TemplateField
- Android OpenGLES2.0(十二)——FBO离屏渲染
- NetCore2.0 RozarPage自动生成增删改查
- vs2017上.netCore2.0 EF的DataBase First使用笔记
- WF4.0实战(十二):ASP.NET MVC2.0结合WF4.0实现用户多步注册流程
- 【.NetCore学习】ASP.NET Core EF Core2.0 DB First现有数据库自动生成实体Context
- RabbitMQ随手笔记(十)利用RabbitMQ记录日志(.netCore2.0)
- netCore2.0 加载DonetTools失败
- Scott Mitchell 的ASP.NET 2.0数据教程之十二:在GridView控件中使用TemplateField
- [ASP.NET学习笔记之十二]ASP.NET 2.0中Theme、MasterPage和代码国际化