RabbitMQ随手笔记(十二)备份交换器(.netCore2.0)

备份交换器,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);//备份交换器
                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);

 

更多精彩请关注公众号:隔壁王小猿(gbwxy-happy)

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值