Springboot2.x는 RabbitMQ를 통합하여 메시지 전송 확인 및 메시지 수신 확인 (ACK)을 실현합니다.

머리말

먼저 콜백 메커니즘을 살펴보십시오.

  • 메시지가 거래소에 전달되었는지 여부에 관계없이 ConfirmCallback 콜백이 수행되고 전달이 성공합니다. ack = true, 그렇지 않으면 false입니다.
  • 스위치가 큐와 성공적으로 일치하면 ReturnCallback 콜백이 수행되지 않고 그렇지 않으면 ReturnCallback 콜백이 먼저 수행 된 다음 ConfirmCallback 콜백이 수행됩니다.
  • 메시지가 거래소에 성공적으로 전달되었지만 대기열과 일치하지 않는 경우 ConfirmCallback 콜백 확인이 여전히 참입니다.
我的springboot版本springBootVersion = '2.2.1.RELEASE'

ConfirmCallback

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

ReturnCallback

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

 

추천

출처blog.csdn.net/qq_36850813/article/details/103296210