消息回调

0. 项目结构rabbitmq04rabbitmq-providerrabbitmq-consumercommon1. 什么是消息回调消息回调,其实就是消息确认(生产者推送消息成功,消费者接收消息成功)2. 为什么要进行消息确认经常会听到丢消息的字眼, 对于程序来说,发送者没法确认是否发送成功,消费者处理失败也无法反馈,没有消息确认机制,就会出现消息莫名其妙的没了,也不知道什么...
摘要由CSDN通过智能技术生成

0. 项目结构
rabbitmq04
rabbitmq-provider
rabbitmq-consumer
common
在这里插入图片描述

1. 什么是消息回调
消息回调,其实就是消息确认(生产者推送消息成功,消费者接收消息成功)

2. 为什么要进行消息确认
经常会听到丢消息的字眼, 对于程序来说,发送者没法确认是否发送成功,消费者处理失败也无法反馈,
没有消息确认机制,就会出现消息莫名其妙的没了,也不知道什么情况

3. 生产者推送消息[确认]
0.前提:使用直连交换机完成消息的发送和接收

1.在rabbitmq-provider项目的application.yml文件上,添加消息确认的配置项
#1.开启 confirm 确认机制
spring.rabbitmq.publisher-confirms=true
#2.开启 return 确认机制
spring.rabbitmq.publisher-returns=true
#3.设置开启Mandatory,才能触发回调函数,无论消息推送结果怎么样都强制调用回调函数
spring.rabbitmq.template.mandatory=true

server:
  port: 8081
  servlet:
    context-path: /rabbitmq-provider
spring:
  rabbitmq:
    virtual-host: /
    username: guest
    password: guest
    host: 192.168.186.136
    port: 5672
    #1.开启 confirm 确认机制
    publisher-confirms: true
    #2.开启 return 确认机制
    publisher-returns: true
    #3.设置开启Mandatory,才能触发回调函数,无论消息推送结果怎么样都强制调用回调函数
    template:
      mandatory: true

 注1:设置开启Mandatory,才能触发回调函数,无论消息推送结果怎么样都强制调用回调函数
      spring.rabbitmq.template.mandatory=true//此行配置与正面代码效果一样 
      rabbitTemplate.setMandatory(true);//此行代码也配置项3的效果一致

2.创建RabbitTemplateConfig,在里面创建自定义RabbitTemplate并添加2个相关的回调函数
RabbitTemplate.ConfirmCallback
通过实现ConfirmCallback 接口,消息发送到 Broker 后触发回调,确认消息是否到达 Broker 服务器,也就是只确认是否正确到达 Exchange 中
还需要在配置文件添加配置spring.rabbitmq.publisher-returns=true

package com.lyl.rabbitmqprovider.rabbitmq;

import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.amqp.rabbit.connection.CorrelationData;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @authorlyl
 * @site
 * @company
 * @create  2019-12-27 11:16
 */
@Configuration
@Slf4j
public class RabbitTemplateConfig {
   
    @Bean
    public RabbitTemplate createRabbitTemplate(ConnectionFactory connectionFactory, Jackson2JsonMessageConverter jackson2JsonMessageConverter) {
   
        RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);
        rabbitTemplate.setMessageConverter(jackson2JsonMessageConverter);//指定json转换器
        return rabbitTemplate;
    }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值