消息中间件-RabbitMQ学习

折月煮酒 提交于 2019-11-30 22:41:59

 

RabbitMQ安装

docker run -di --name=rabbitmq -p 5671:5671 -p 5672:5672 -p 4369:4369 -p 15671:15671 -p 15672:15672 -p 25672:25672 rabbitmq:management

 

登录mq页面,测试安装是否成功: ip:15672

登录账号: guest 密码: guest

 

-学习应该从了解他的工作方式开始

前提: 就是要知道的  交换器 exchange,  队列queue

交换器:用来接收消息, 并分发给哪个队列, 一个或多个

队列: 用来存 消息的, 经过交换器的消息, 就会存到各个队列里, 一个或多个

-两个概念:

生产者:  通过rebbitmq生产消息    一个或多个 

消费者:  使用rebbitmq里面的消息  一个或多个

 

-RabbitMQ模式: 3种, 交换器的不同分发规则

前提:需要在 (rabbitmq的可视化界面 ip:15672 端口 ) 添加一个队列

打开页面后,找到 Queues -> add a new queue中添加, 写队列名字 点击  Add Queue 即可添加

1 直接模式: Direct Exchange

      可以理解为, 生产者直接将消息发送给了队列

       指的是 交换器里有个 Direct Exchange[名字为 空字符串 ""的交换器],  只要是发送到

       Direct Exchange的消息, 都会被转发到 RouteKey(路由)中指定的queue

       该交换器的名字为 空字符串 ""

直接模式的消费者
     * 特点:
     *      带有负载均衡的功能
     *      多个消费者时, 根据项目的启动顺序,每次发送给一个消费者去消费,
     * 例如:
     *      3个消费者
     *      第一次个消息
     *      由第1消费者消费
     *      第二个消息
     *      由第2个消费者消费
     *      第三个消息
     *      又第3个消费者消费
     * 而这1,2,3消费者就是不同启动顺序产生的先后.

,2. 分裂模式 Fanout Exchange   - 用的少

特点: 一个消息, 同时分发给多个消费者

缺点:  消息一经产生,  会将消息推送给所有队列 , 无法做到 选择性推送, 也就是无法配置推送规则

在可视化页面选

Queues : 添加你要的多个 队列

Exchanges -> add a new exchange -> 输入名字, type选择Fanout -> 然后点击 add exchange

-> 之后再列表中找到 添加好的 交换器 名字点击, 进入到绑定 队列

-> 找到 To queue 表单, 填写 你添加的队列, 点击" bind "即可

 

3. 主题模式 - Topic - 常用

学习主题模式, 需要了解 他是 分裂模式的加强版.

他可以通过 "表达式" 来匹配 要将消息发送给谁(谁值得是队列, 发送给哪个队列)

表达式不用 专门去学. . .  了解常用两个 符号

            1).  #: 警号  匹配 表达式任意多级路径, 任意名.

            2). *: 星号, 匹配 表达式一级, 任意名

前面说过 有个routingKey,  此时的 "表达式" , 就是匹配 routingKey的

a. 进入到rabbitmq 管理页面

找到 exchanges -> Add a new exchange(创建一个交换器) ->  在列表中找到新创建的交换器点击 -> add binding from this exchange(为交换器匹配队列,并配置规则)

b. 在To queue 表单 输入添加的 队列 queue名称

    在Routing key: 表单输入匹配规则. 

例如: 

       product.#

       #.product

3. 点击Bind 按钮

注: 用时,  表达式最好匹配一个全都发送的, 也就是所有queue 队列都能接收的表达式

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!