83.分布式消息中间件-SpringBoot整合RabbitMQ

一、简单回顾RabbitMQ为什么是高级队列

在这里插入图片描述

二、四种交换机类型与扇形交换机

Direct exchange(直连交换机)
Fanout exchange(扇型交换机)
Topic exchange(主题交换机)

交换机核心作用:分发路由消息、中专
队列:容器存放多个不同消息 遵循先进先出的原则
消息:传递的参数
路由键:交换机根据这样的路由键的值,发送不同的队列中 匹配过程

扇型交换机主要的特征:

只要队列绑定同一个交换机,生产者将消息投递到交换机中,交换机会将消息发送给所有绑定的队列进行存放消息。
直连交换机:

三、直连交换机类型设计原理

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Direct exchange(直连交换机):

根据生产者投递不同的路由键,在交换机发送到队列实现匹配路由键

四、通过代码形式演示直连交换机

在这里插入图片描述
在这里插入图片描述

可以绑定多个 Rounting key:

在这里插入图片描述
在这里插入图片描述

五、主题交换机类型实现模糊匹配

在这里插入图片描述

当交换机类型为topic类型时,根据队列绑定的路由建模糊转发到具体的队列中存放。

#号表示支持匹配多个词
*号表示只能匹配一个词
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

六、SpringBoot整合Rabbitmq配置

Topic 主题交换机:

根据路邮键的key实现模糊匹配到队列存放。

@Component
public class RabbitMQConfig {
    /**
     * springboot项目中整合队列
     */
    /**
     * 定义交换机
     */
    private String EXCHANGE_SPRINGBOOT_NAME = "mayikt_springboot_exchange";


    /**
     * 短信队列
     */
    private String FANOUT_QUEUE_SMS = "mayikt_fanout_sms_queue";
    /**
     * 邮件队列
     */
    private String FANOUT_QUEUE_EMAIL = "mayikt_fanout_email_queue";


    /**
     * 声明的sms队列
     *
     * @return
     */
    @Bean
    public Queue smsQueue() {
        return new Queue(FANOUT_QUEUE_SMS);
    }

    /**
     * 声明的email队列
     *
     * @return
     */
    @Bean
    public Queue emailQueue() {
        return new Queue(FANOUT_QUEUE_EMAIL);
    }

    /**
     * 声明我们的交换机
     *
     * @return
     */
    @Bean
    public FanoutExchange fanoutExchange() {
        return new FanoutExchange(EXCHANGE_SPRINGBOOT_NAME);
    }

    /**
     * 短信队列绑定我们的交换机-
     *
     * @param smsQueue
     * @param fanoutExchange
     * @return
     */
    @Bean
    public Binding smsBindingExchange(Queue smsQueue, FanoutExchange fanoutExchange) {
        return BindingBuilder.bind(smsQueue).to(fanoutExchange);
    }

    /**
     * 邮件队列绑定我们的交换机-
     *
     * @param emailQueue
     * @param fanoutExchange
     * @return
     */
    @Bean
    public Binding emailBindingExchange(Queue emailQueue, FanoutExchange fanoutExchange) {
        return BindingBuilder.bind(emailQueue).to(fanoutExchange);
    }

    // bean id

}

七、使用SpringBoot自动创建队列和交换机

@RestController
public class FanoutProducer {
    @Autowired
    private AmqpTemplate amqpTemplate;

    /**
     * 短信队列
     */
    private String FANOUT_QUEUE_SMS = "mayikt_fanout_sms_queue";

    @RequestMapping("/sendMsg")
    public String sendMsg() {
        // 投递消息 客户端不会立马知道消费是否被消费,但是能够确认知道我们是否投递到消息中间件
        amqpTemplate.convertAndSend(FANOUT_QUEUE_SMS, "mayikt");
        /*  根据消息全局id主动查询
         */
        return "success";
    }
}

在这里插入图片描述

@Component
@RabbitListener(queues = "mayikt_fanout_sms_queue")
public class FanoutEmailConsumer {

    /**
     * 监听队列回调的方法
     *
     * @param msg
     */
    @RabbitHandler
    public void process(String msg) {
        System.out.println("短信消费者消息msg:" + msg);
    }
}

会自动创建队列
在这里插入图片描述

八、实现路由分发多个不同队列

在这里插入图片描述
在这里插入图片描述

发布了119 篇原创文章 · 获赞 12 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_44722978/article/details/103576107