rabbitMQ入门【概念篇】(第一章)

声明

入门肯定少不了概念,博主也是一名小白,该篇章也是博主的rabbitmq入门博客,如果有说的不对或者说不明白的地方,欢迎大神们评论,博主一旦发现一定会定期修改!
学习rabbitmq首先我们要弄懂“消息队列”是一个什么东西,博主之前最先接触队列只是在opesntack部署时才知道有这个一个东西,只知道组件之间的通信是通过“消息队列”进行的,现在来跟随博主一步一步走进rabbitmq吧~
这里声明:建议按照博客的顺序阅览,从基础跟博主一起学起,该博客也是博主从各类博客上“东拼西凑”总结出来的,用于自己的学习总结,并不是“大牛帖”

概念

RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。RabbitMQ服务器是用Erlang语言编写的,而群集和故障转移是构建在开放电信平台框架上的。所有主要的编程语言均有与代理接口通讯的客户端库。

安装

这里就不详细写了,这里软件丢给大家,自己上网找教程,还是挺简单的
链接:https://pan.baidu.com/s/1VueSgK8s_hjXTERv3IJ74w
提取码:oxxh

使用场景

接着跟着博主了解一下rabbitMQ的使用场景吧,主要用于以下几种场景【这是我查到的,可能不全,稍微了解一下就好】

  1. 异步处理,这里用图片展示注册服务器需要响应的时间区别。顺序分别为串行、并行和引入消息队列的区别
    串行并行消息队列

  2. 应用解耦,讲一个电商的例子,用户下单需要生成订单,完成后调用库存模块,把对应的商品数量-1
    分布式模块系统
    这样子有一个缺陷,若库存系统出问题,那么订单系统将无法正常生成,那老板不是少赚了很多钱?没关系,引入消息队列之后
    优化订单系统:用户下单后,订单系统完成持久化处理,将消息写入消息队列,返回用户订单下单成功
    库存系统:订阅下单的消息,获取下单消息,进行库操作。 就算库存系统出现故障,消息队列也能保证消息的可靠投递,不会导致消息丢失,库存系统恢复正常会正常处理业务

  3. 流量削峰,一般在淘宝或者京东上都有现实秒杀,我的天,一个商品1亿个用户在抢,这种并发小编是没接触过,这不是不得卡死!不慌,引入消息队列之后可以有以下作用
    可以控制活动人数,超过此一定阀值的订单直接丢弃
    可以缓解短时间的高流量压垮应用(应用程序按自己的最大处理能力获取订单)

队列模式

一、简单队列
简单队列
P(produce)生产者,C(consumer)消费者,红色(queue)队列
特点:一对一,一个生产者对应一个消费者

二、Work模式
work模式
P(produce)生产者,C1(consumer)消费者1,C2(consumer)消费者2,红色(queue)队列
特点:一个生产者,多个消费者,每个消费者获取到的消息唯一,多个消费者只有一个队列。一对多,一个消息只能被C1或C2处理,只能有一个消费者获得消息【竞争消费者模式】
这里给大家讲解下二者之间的区别:
正常模式
C1和C2分别去queue里面去拿消息,举个例子,分别对业务执行Thread.sleep();方法,C1参数为1000,C2参数为2000,在正常模式下,若一共有10个消息,那么C1和C2为各拿5条,不会因为C1与C2处理时间不同就区别对待。个人理解:这样有一点不好,会导致浪费资源,这里个人举一个例子给大家:
一共有10条消息,其中C1处理一个消息需要用时1秒,C2处理消息用时2秒,若采用正常模式,C1处理消息耗时5秒,C2耗时10秒,C1与C2对比,C1有5秒是处于空闲状态的,而C2则一直处于工作状态,这样就导致了资源浪费
能者多劳【负载均衡、公平竞争】:
C1和C2分别去queue里面去拿消息,根据C1和C2处理级别,来取决C1与C2能从队列中拿到的数量,若C1处理能力大于C2,则C1从队列订阅的消息会比C2多
代码设置:channel.basicQos(1);详细会在后续文章中的"代码/实践"部分讲述

三、发布/订阅模式
发布/订阅模式
P(produce)生产者,C1(consumer)消费者1,C2(consumer)消费者2,红色(queue)队列,蓝色(exchange)交换机
特点:一个生产者发送的消息会被多个消费者获取。一个生产者、一个交换机、多个队列、多个消费者。生产者可以选择将消息发送到队列或者是交换机,而消费者只能从队列中获取消息。如果消息发送到没有队列绑定的交换机上,那么消息将丢失。交换机不能存储消息,消息存储在队列中
个人理解:这里容我哔哔两句,建议大家根据顺序,将发布/订阅模式、路由模式以及主题模式看完再接着看交换机类型,其实这三种模式差不多,只不过是交换机的type不一样,发布/订阅模式其实就是分发模式,这里给大家讲一个生活中的场景来理解一下。我们生活中能接触到的此类,例如微信的"公众号订阅",一旦用户订阅了微信的"rabbitMQ"公众号,一单公众号有推出新的文档,那么"rabbitMQ"公众号将会把文章推送到所有订阅了"rabbitMQ"公众号的用户。

四、路由模式
路由模式
P(produce)生产者,C1(consumer)消费者1,C2(consumer)消费者2,红色(queue)队列1与队列2,蓝色(exchange)交换机,类型是direct
特点:生产者将消息发送到direct交换器,在绑定队列和交换器的时候有一个路由key,生产者发送的消息会指定一个路由key,那么消息只会发送到相应key相同的队列,接着监听该队列的消费者消费消息。
个人补充说明:
以下为 队列1 的路由key
队列1
以下为 队列2 的路由key
队列2
情况1:若P(生产者)向X(交换机)发送一条消息,并且制定交换机的路由key为error。由于队列1与队列2与交换机绑定的key都存在"error",则P(生产者)发出的消息将会被两条队列所接收到。
情况2:若P(生产者)向X(交换机)发送一条消息,并且制定交换机的路由key为info。则只有队列2能收到P发送的消息

五、主题模式
主题模式>特点:上面的路由模式是根据路由key进行完整的匹配(完全相等才发送消息),这里的通配符模式通俗的来讲就是模糊匹配。
符号“#”表示匹配一个或多个词,符号“*”表示匹配一个词。
个人补充说明:
主题模式和路由模式其实类似,只不过绑定的key可以根据符号进行匹配。还是举个例子来简单了解一下。
以下为 队列1 的路由key
队列1
以下为 队列2 的路由key
队列2
若P向X发消息,并且路由key为"lazy.orange.hahaha"时,消息会被队列1和队列2同时接收到。“lazy.haha.orange"满足队列1的 “※.orange.※”(博客符号有问题,凑合看吧),其中上文有说※作为匹配一个单词,那key为"lazy.orange.hahaha"就满足队列1的条件;队列2的条件为"lazy.#”,只要是以"lazy"开头的单词均可以满足队列2的路由key,#表示匹配任意个字符,那么意味着lazy.a.b.c也能满足队列2的key;所以key为"lazy.orange.hahaha"两个队列都能收到消息
下面给大家留了一个问题,你们琢磨一下:若P发送X,其中路由key为:“azy.orange.rabbit”,请问有几个队列能接受到?为什么?

交换机类型

  1. direct (直连交换机)
    根据消息携带的路由键(routing key)将消息投递给对应队列的,步骤如下:
    将一个队列绑定到某个交换机上,同时赋予该绑定一个路由键(routing key)
    当一个携带着路由值为R的消息被发送给直连交换机时,交换机会把它路由给绑定值同样为R的队列。
  2. fanout(扇型交换机)
    将消息路由给绑定到它身上的所有队列。不同于直连交换机,路由键在此类型上不启任务作用。如果N个队列绑定到某个扇型交换机上,当有消息发送给此扇型交换机时,交换机会将消息的发送给这所有的N个队列
  3. topic(主题交换机)
    队列通过路由键绑定到交换机上,然后,交换机根据消息里的路由值,将消息路由给一个或多个绑定队列。
    扇型交换机和主题交换机异同:
    对于扇型交换机路由键是没有意义的,只要有消息,它都发送到它绑定的所有队列上
    对于主题交换机,路由规则由路由键决定,只有满足路由键的规则,消息才可以路由到对应的队列上
  4. headers(头交换机)
    类似主题交换机,但是头交换机使用多个消息属性来代替路由键建立路由规则。通过判断消息头的值能否与指定的绑定相匹配来确立路由规则。
    此交换机有个重要参数:”x-match”
    当”x-match”为“any”时,消息头的任意一个值被匹配就可以满足条件
    当”x-match”设置为“all”的时候,就需要消息头的所有值都匹配成功

总结

关于 RabbitMQ 的五种队列,其实实际使用最多的是最后一种主题模式,通过模糊匹配,使得操作更加自如。那么我们总结一下有交换器参与的队列(最后三种队列)工作方式如下:
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值