zoukankan      html  css  js  c++  java
  • 初识RabbitMQ

    1:RabbitMQ是什么

    协议

    RabbitMq是基于AMPQ协议的一种 消息中间件

    消息路由过程

    简单路由

    RabbitMq 拿到消息之后,会先交给 交换机 (Exchange), 然后交换机再根据预先设定的不同绑定( Bindings )策略,来确定要发给哪个队列。

    灵活路由

    根据 RoutingKey 和 Arguments 来灵活匹配队列

    ExchangeName(交换机名称)+QueueName(队列名称)+RoutingKey+Arguments(头部属性) 四种属性组合确定最终消费队列。

    tip:当mq模式为topic时,同ExchangeName同QueueName不能使用不同的routingKey

    2:RabbitMQ的几种作用

    削峰

    适用于实时性不高,大批量请求的场景。
    比如10086群发百万级的中秋节祝福短信。

    异步

    适用于主要业务和其他业务进行分离的场景。
    比如在用户进行注册时,用户信息的插入肯定是同步的,但是用户的账户开通邮件可以是异步的。

    解耦


    3:RabbitMQ的几种模式

    fanout 模式

    类似于广播的作用。
    生产者将消息发送到某个队列,凡是绑定该队列的消费者都将消费这个消息。

    direct 模式

    具有分食的作用。
    生产者将消息发送到某个队列,绑定该队列的所有消费者将各自消费这个消息,
    该消息指派给某个消费者并确认消费后,不会再派发给其他消费者。

    topic 模式

    类似于订阅的作用。
    生产者将消息发送到某个队列,但队列中存在订阅了不同的topic(routingKey)的消费者,
    这些消费者只会消费自己订阅了的topic的消息。

    比如consumer_a 在‘bac’队列订阅了topic='rk.a'的消息,那么他只会收到topic='rk.a'的消息。
    比如consumer_b 在‘bac’队列订阅了topic='rk.b'的消息,那么他只会收到topic='rk.b'的消息。
    比如consumer_c 在‘bac’队列订阅了topic='rk.*'的消息,那么他只会收到topic=['rk.a','rk.b']的消息。

    header 模式

    在一堆条件中具有任意匹配和全匹配的作用。

    比如consumer_a 在‘bac’队列绑定了header={'id':1,"gz":2}的消息,
    匹配模式是'any',那么收到的消息可以为header={'id':1,"gz":2} 或者 header={'id':1,"gz":1}的消息。
    匹配模式是'all',那么收到的消息只能为header={'id':1,"gz":2}的消息。


    4:JAVA中如何使用RabbitMQ

    消费者构建过程

    生产者构建过程

    初始化ConnectionFactroy 代码:


    所有代码可点击github查看

  • 相关阅读:
    求约数的个数-牛客
    成绩排序 -- 牛客
    SpringBoot学习笔记4-整合Jdbc Template-Mybatis-多数据源-事务管理-JPA
    SpringBoot学习笔记3-自定义拦截器-全局异常处理-Freemarker-Thymeleaf-定时任务调度
    SpringBoot学习笔记2-日志管理-开发模式-web开发-FastJson
    SpringBoot学习笔记1-简介-全局配置文件-starter-profiles-自动配置原理
    将Ueditor文件上传至OSS
    nouveau :failed to create kernel chanel,-22
    教你怎么炼鸡肉
    教你怎么写猜年龄游戏
  • 原文地址:https://www.cnblogs.com/zgq7/p/13692616.html
Copyright © 2011-2022 走看看