Springboot2.x integra RabbitMQ para realizar la confirmación del envío de mensajes y la confirmación de recepción de mensajes (ACK)

Prefacio

Primero mira el mecanismo de devolución de llamada:

  • No importa si el mensaje se entrega al intercambio o no, se realiza la devolución de llamada ConfirmCallback y la entrega es exitosa ack = true, de lo contrario es falso
  • Si el interruptor coincide con la cola correctamente, no se realizará la devolución de llamada ReturnCallback; de lo contrario, la devolución de llamada ReturnCallback se realizará primero y luego se realizará la devolución de llamada ConfirmCallback
  • Si el mensaje se entrega correctamente al intercambio pero no coincide con la cola, la confirmación de devolución de llamada ConfirmCallback sigue siendo verdadera
我的springboot版本springBootVersion = '2.2.1.RELEASE'

Confirmar devolución de llamada

Primero necesitas configurar en yml:

publisher-confirm-type: correlated
    /**
     * 测试消息确认回调(必须在yml配置publisher-confirm-type: correlated)
     */
    @GetMapping("sendConfirmCallback")
    public Resp sendConfirmCallback() {
        rabbitTemplate.setConfirmCallback((correlationData, ack, cause) -> {
            System.out.println("ack:" + ack);
            if (!ack) {
                System.out.println("异常处理");
            }
        });
        amqpTemplate.convertAndSend("test-queue", "测试ack确认模式");
        return Resp.success("ok", null);
    }

Devolución de llamada

Necesita ser configurado en yml

publisher-returns: true

    @Autowired
    private AmqpTemplate amqpTemplate;
    @Resource
    private RabbitTemplate rabbitTemplate; 

   /**
     * 启动消息失败返回,比如路由不到队列时触发回调
     * 测试发布回调(必须在yml配置publisher-returns: true)
     */
    @GetMapping("sendReturnCallback")
    public Resp sendReturnCallback() {
        RabbitTemplate.ReturnCallback returnCallback = (message, replyCode, replyText, exchange, routingKey) -> {
            System.out.println("========returnCallback=============");
            System.out.println("========returnCallback=============");
        };
        rabbitTemplate.setReturnCallback(returnCallback);
        amqpTemplate.convertAndSend("test-", "测试发布回调模式");
        return Resp.success("ok", null);
    }

 

Supongo que te gusta

Origin blog.csdn.net/qq_36850813/article/details/103296210
Recomendado
Clasificación