美文网首页rabbitmq
备份交换器(Alternate Exchange)

备份交换器(Alternate Exchange)

作者: 于情于你 | 来源:发表于2020-11-18 16:12 被阅读0次

    上一节mandatory和immediate,说生产者在发送消息的时候如果不设置 mandatory 参数,那么消息在未被路由的情况下将会丢失,如果设置了 mandatory 参数,那么需要添加 ReturnListener 的编程逻辑。如果既不想复杂化生产者的编程逻辑,又不想消息丢失,那么可以使用备份交换器。
    可以通过在声明交换器(调用 channel.exchangeDeclare 方法)的时候添加alternate-exchange 参数来实现。

        Map<String, Object> args = new HashMap<String, Object>();
        args.put("alternate-exchange", "myAe");
        channel.exchangeDeclare("normalExchange ", "direct", true, false, args);
        channel.exchangeDeclare("myAe", "fanout", true, false, null);
        channel.queueDeclare("normalQueue ", true, false, false, null);
        channel.queueBind("normalQueue", "normalExchange","normalKey");
        channel.queueDeclare("unroutedQueue", true, false, false, null);
        channel.queueBind ("unroutedQueue","myAe","");
image.png

    为防止消息丢失建议将备份交换器设置为fanout类型。

    如果设置的备份交换器不存在,客户端和RabbitMQ服务端都不会有异常出现,此时消息会丢失。
    如果备份交换器没有绑定任何队列,客户端和RabbitMQ服务端都不会有异常出现,此时消息会丢失。
    如果备份交换器没有任何匹配的队列,客户端和 RabbitMQ 服务端都不会有异常出现,此时消息会丢失。
    如果备份交换器和mandatory 参数一起使用,那么mandatory 参数无效。

相关文章

网友评论

    本文标题:备份交换器(Alternate Exchange)

    本文链接:https://www.haomeiwen.com/subject/crlciktx.html