RabbitMQ入门认识

欢迎来到我的博客中心

你好! 这是我作为一个程序员第一次写博客 ,主要是我初步认识RabbitMQ,在学习过程中所总结,主要是用来做个笔记希望可以后期的不断完善。

RabbitMQ是什么

RabbitMQ是一个由erlang开发的AMQP,在高可用,易用性,扩展性方面表现不俗,MQ的意思可以理解为消息队列,队列可以理解为一条条的管子,消息在管子中进行传递,
比如:一个项目 有两个系统,一个是用户中心(主要是管理用户的权限等信息,)一个是功能型,主要是业务,以及流程,那么用户是在用户中心申请账号,创建账户 权限 密码等,举个修改头像的例子来来说 ,用户中心创建了账户信息,用户要在用户中心修改头像,那么如何让功能性的那个项目同步,这里就用到了MQ.
还有就是我们在双11的时候,当我们凌晨大量的秒杀和抢购商品,然后去结算的时候,就会发现,界面会提醒我们,让我们稍等,以及一些友好的图片文字提醒。而不是像前几年的时代,动不动就页面卡死,报错等来呈现给用户。综合就是也是提供了异步操作 让他去排队 然后执行

核心组件

  1. Message :消息,消息是不具名的,它由消息头和消息体组成。消息体是不透明的,而消息头则由一系列的可选属性组成,这些属性包括routing-key(路由键)、priority(相对于其他消息的优先权)、delivery-mode(指出该消息可能需要持久性存储)等。
  2. Publisher:消费的生产者,也是一个向交换器发布消息的客端应用程序;消息发布到交换器然后通过交换器放入到绑定的Queues
  3. Exchange:交换器,用来接收生产者发送的消息,并将这些消息路由给服务器的队列中 ,Exchange有四中类型,direct:点对点,通过Routing key单播; fanout:广播,无须写Routing key直接发布到当前交换机下所有的队列中;topic:通过主题,提供了通配符的匹配如*和#,来进行发布到具体的队列:如;一个队列是zhangyang.emp 那么他的route key 为zhangyang.# 或者zhangyang.*发布的消息zhangyang.emp都可以接收到:headers: 消息发送时可以在header中定义一些键值对,接收消息队列与headers转发器绑定时可以指定键值对,all、any两种方式(队列绑定转发器时指定的键值对与headers中存储的键值对匹配),匹配上即可接收到消息
  4. Queue:消息队列,用来保存消息发送给消费者,他是消息的容器,也是消息的终点,消息可以同时存入一个或者多个队列,消息会一直在这个队列里,等待消费者连接这个队列
  5. Binding:用户绑定队列,在交换机中可以看到,用于消息队列和交换器之间的关联,一个交换器可以绑定多个队列,但是Exchange和Queuc的绑定也可以是多对多的关系
  6. Connection:网络连接,如何一个TCP连接
  7. Channel:信道,多路复用连接中的一条独立的双向数据流通道。信道是建立在真实的TCP连接内的虚拟连接,AMQP 命令都是通过信道发出去的,不管是发布消息、订阅队列还是接收消息,这些动作都是通过信道完成。因为对于操作系统来说建立和销毁 TCP 都是非常昂贵的开销,所以引入了信道的概念,以复用一条 TCP 连接。
  8. Consumer:消息的消费者,通俗的讲就是你要从队列里取数据了
  9. Virtual Host:虚拟主机,表示一批交换器,消息队列和相关对象。虚拟主机是共享相同的身份认证和加密环境的独立服务器域。每个 vhost 本质上就是一个 mini 版的 RabbitMQ 服务器,拥有自己的队列、交换器、绑定和权限机制。vhost 是 AMQP 概念的基础,必须在连接时指定,RabbitMQ 默认的 vhost 是 / 。
  10. Broker:表示消息队列服务器实体

这里我用docker装一个RabbitMQ作为一个入门

1,首先docker确定先安装上 然后通过docker的命令 来查询RabbitMQ的镜像,然后下载这里我用了镜像加速下载:
镜像加速地址https://www.docker-cn.com/registry-mirror

在这里插入图片描述
2,然后通过docker images 查看本机的镜像然后运行RabbitMQ镜像 ,并且在浏览器中访问,默认账户guest 密码guest
在这里插入图片描述在这里插入图片描述
-d:后台运行 -p 提供端口的映射 5672:主机的5672映射到docker容器的5672,这是客户端RabbitMQ通信的端口 15672是管理页面访问WEB页面的端口 --name为这个容器起个名字 最后是镜像ID

到了这里就算是完成了 你可以登陆进去看到一些默认的配置项比如 Virtual Host默认主机,Exchanage默认的交换机 和Queues等等 这里不再说了 自己可以去看
在这里插入图片描述

3,我们创建几个交换机和队列 并且为之绑定,点击到Exchange地址栏,然后点击add a new change 注意:Durability选为durable下次启动的时候还是存在的不然就没了分别创建topic,fanout,direct交换机;
在这里插入图片描述
注意那个type:是direct,topic和fanout

4,创建队列,这里创建四个为例
在这里插入图片描述
5,为交换机绑定队列

exchange.direct的绑定

在这里插入图片描述

exchange.fanout的绑定

在这里插入图片描述

exchange.topic的绑定

在这里插入图片描述
6,创建一个spring boot项目测试
导入RabbitMQ依赖 然后为了使返回的数据更加看起来遍历这里用到一个配置类 具体如下

在这里插入图片描述

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






7,测试RabbitMQ点对点的传播 就是exchange.direct
代码执行后首先是zhangyang这个队列的里面消息数量增加了1 然后点击这个队列然后点击下getMessage可以看到信息

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

在这里插入图片描述




8,测试广播模式 就是exchange.fanout
代码执行所有他绑定的队列都会增加一条消息
**
在这里插入图片描述
在这里插入图片描述



9,测试exchange.topic,通配符下消息的发布
注意看上一步的zhangyang.eat是 1 现在为2 route key 是*.eat
在这里插入图片描述

在这里插入图片描述

最后我们在补充点
在dockers安装的RabbitMQ再次启动的时候是 docker restart myrabbitMQ 一定要是restart 别docker run myrabbitMQ
@Autowired
AmqpAdmin amqpAdmin; //提供代码操作创建删除交换机 队列  绑定队列的功能

@Test
public void createExchange(){
    //创建交换机

// amqpAdmin.declareExchange(new DirectExchange(“amqpadmin.exchange”));
// System.out.println(“创建完成”);
//创建一个队列
// amqpAdmin.declareQueue(new Queue(“amqpadmin.quee”,true));
// System.out.println(“创建成功”);
amqpAdmin.declareBinding(new Binding(“amqpadmin.quee”,Binding.DestinationType.QUEUE,“amqpadmin.exchange”,“amqp.haha”,null));
}

这个仅仅是一个入门 windows下的RabbitMQ比较简单安装 不过安装之前一定要先安装erlang 不然MQ就挂了 ,还有很多API都需要操作正规的开发项目是有一个listener监听的 只要消息一发布 消费者端就能查询到
在这里插入图片描述
这个入门算是暂时完成了我也是在部署项目的时候觉得这个MQ 挺有意思的而且很重要 所以经过主管的提点 和自己的学习适当的入门了下 第一次写 写的不好 不足之处 如果有人看到 希望可以给予一定的批评建议 学习之路任重而道远,我也希望自己做一个合格的工程师

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值