spring5.x-rabbitmq 高级篇

spring-rabbitmq 此模块是从spring5x-base 基础模块扩展过来的
spring5x-base模块是一个非常干净的spring5.x+springMVC架构
如果没有搭建spring5x-base模块,请参考 spring5x-base模块搭建

搭建项目

基于spring5x-base 基础模块 新增功能:

  • 1、spring 集成RabbitMQ 及高级使用

由于之前已经贴出一份简单RabbitMQ配置,这里不详细说配置了,直接都是全配置,代码不全的区github下拉看具体代码。
简单配置地址: spring5.x-rabbimq 基础篇

RabbitMQ 图解:
https://blog.csdn.net/bestmy/article/details/84304964
https://blog.csdn.net/qq_29914837/article/details/92739464
https://www.cnblogs.com/yinfengjiujian/p/9115539.html

1、spring 集成RabbitMQ 及高级使用


common.xml RabbitMQ 公共配置




    

    
    

    

    
    

    
    



producer.xml 生产者:发送消息




    

    
    

    

    
    
        
        
        
        
        
        
        
        
        
    
    
    
    
    
    
    
    
    


    

    

    
    
    
    
    
    
    
    
    


    

    
    
        
        
            
            
            
            
        
    

    
    
        
            
            

            
            

            
            
            

        
    

    
    
        
            
            
            
            
        
    

    
    




consumer.xml 消费者:接收消息




    

    
    

    

    
    


    
    
    
    
    
    
    
    
    

    
    
        
    
    
        
    
    
        
    
    
        
    
    
    
        
    
    
        
    
    
        
    



spring-mvc.xml 配置

    
    
    
    
    

ProducerMQController.java 生产者部分代码,其余代码,去github上看

/**  ========ReturnCallback 和  ConfirmCallback=========  **/

    /**ConfirmCallback :消息到达交换机 confirm被回调,返回ack=true
     * 1、exchange,queue 都正确,confirm被回调, ack=true
     * @param
     * @return java.lang.String
     */
    @RequestMapping("confirm/sendMsg")
    public String sendAmqbMsg5() {
        String firstReceived = " 此 mq.direct.exchange 交换机存在,队列也存在 ";
        rabbitTemplate.convertAndSend("mq.direct.exchange", "routingKey.send.str.5", firstReceived);
        return "success";
    }

    /**ConfirmCallback: 消息无法到达交换机 confirm被回调,返回ack=false
     * 2、exchange 错误,queue 正确,confirm被回调, ack=false
     * @param
     * @return java.lang.String
     */
    @RequestMapping("confirm/sendMsg2")
    public String sendAmqbMsg6() {
        String firstReceived = " 此 mq.NotExchange 交换机不存在,无法到达交换机!! ";
        rabbitTemplate.convertAndSend("mq.NotExchange", "routingKey.send.str.5", firstReceived);
        return "success";
    }

    /**ReturnCallback:消息无法从交换机到达队列,返回被监听ReturnCallback,正确到达队列,不被监听
     * 3、exchange 正确,queue 错误 ,confirm被回调, ack=true; return被回调 replyText:NO_ROUTE
     * @param
     * @return java.lang.String
     */
    @RequestMapping("return/sendMsg")
    public String sendAmqbMsg7() {
        // 返回 ReturnCallback 并被监听到
        String firstReceived = "存在 mq.topic.exchange 交换机,不存在的 No.mq.send 队列绑定的路由键,无法到达队列";
        rabbitTemplate.convertAndSend("mq.topic.exchange", "No.mq.send", firstReceived);
        return "success";
    }

    /**ReturnCallback:消息无法从交换机到达队列,返回被监听ReturnCallback,正确到达队列,不被监听
     * 4、exchange 错误,queue 错误,confirm被回调, ack=false
     * @param
     * @return java.lang.String
     */
    @RequestMapping("return/sendMsg2")
    public String sendAmqbMsg8() {
        String firstReceived = "不存在 mq.NotExchange 交换机,无法到达交换机.";
        rabbitTemplate.convertAndSend("mq.NotExchange", "No.mq.send", firstReceived);
        return "success";
    }

ReturnCallback 和 ConfirmCallback 测试接口,控制打印效果:

进入 RabbitConfirmCallback:ack消息到达(true)/没有(false)到达 exchange
消息唯一标识:null
确认结果 ack:true
失败原因:null
QueueStr5Consumer消费掉了:   此 mq.direct.exchange 交换机存在,队列也存在 
    
进入 RabbitConfirmCallback:ack消息到达(true)/没有(false)到达 exchange
消息唯一标识:null
确认结果 ack:false
失败原因:channel error; protocol method: #method(reply-code=404, reply-text=NOT_FOUND - no exchange 'mq.NotExchange' in vhost '/', class-id=60, method-id=40)
 
进入 RabbitReturnCallback 回调 --> exchange到queue失败
返回消息内容 : 存在 mq.topic.exchange 交换机,不存在的 No.mq.send 队列绑定的路由键,无法到达队列
消息回复代码 : 312
描述 : NO_ROUTE
消息使用的交换器 exchange : mq.topic.exchange
消息使用的路由键 routing : No.mq.send
进入 RabbitConfirmCallback:ack消息到达(true)/没有(false)到达 exchange
消息唯一标识:null
确认结果 ack:true
失败原因:null

进入 RabbitConfirmCallback:ack消息到达(true)/没有(false)到达 exchange
消息唯一标识:null
确认结果 ack:false
失败原因:channel error; protocol method: #method(reply-code=404, reply-text=NOT_FOUND - no exchange 'mq.NotExchange' in vhost '/', class-id=60, method-id=40)

项目配置结束

github 地址:

  • https://github.com/zhengjiaao/spring5x

博客地址

  • :https://www.jianshu.com/u/70d69269bd09
  • 掘金: https://juejin.im/user/5d82daeef265da03ad14881b/posts

你可能感兴趣的:(spring5.x-rabbitmq 高级篇)