1.概述
在某种业务场景,如商品秒杀时,会出现瞬间高并发,读写高并发。其中读的高并发不是瞬时的,它持续存在,写的高并发是瞬时的。读写同时存在,就会出现冲突,高并发瞬时的超过系统处理上限。这种情况就需要引入消息队列来解决。
2.消息队列
2.1 队列:queue可以实现让其中的内容执行排队处理机制
2.2 消息:在队列中存放的数据
消息队列主要处理的是端到端的通信(一端客户端,一端服务端,终端客户端)
2.3 背景
早期的消息队列,就是用来解决通信强耦合的。后来随着消息队列的使用,还可以处理高并发的缓存-----消峰
消息队列的作用:
- 通信解耦
- 消峰(秒杀的需求处理逻辑)
3. Rabbitmq
目前最受欢迎的开源消息代理中间件之一,企业级别的消息代理软件.类似产品rocketMQ,kafka(收集流缓存).
企业级别,常见的一种开源消息中间件.实现了sun公司定义的AMQP高级消息队列协议.
AMQP: advanced message queue protocal. 一套接口,实现接口的消息队列可以做到性能较高
3.1结构
客户端:能连接上rabbitmq的所有终端(代码语言.软件程序),都叫做rabbitmq的客户端.
- 生产者:消息发送端
- 消费者:接收消息端
- 无角色:唯一功能定义rabbitmq组件
服务端:rabbitmq启动的消息代理服务器
结构:
- 连接组件
- 交换机组件
- 队列组件
粗粒度连接结构
细粒度核心组件
连接:客户端可以获取的连接通道,通过连接通道才可以和服务端进行消息的逻辑处理的沟通,发送消息,监听消费,声明组件
- 长连接:基于TCP/ip封装的,创建和销毁都占用大量资源,不易频繁创建销毁.
- 短连接:基于长连接创建的短连接,可以频繁创建销毁,速度很快,适合用来通信管理.
交换机:
- exchange,在客户端使用rabbitmq时很有可能会通过一次消息传递并发发送到多个后端队列中,对于客户端并发能力就有稳定的高性能的要求.如果这种并发发送消息交给客户端,由于可能的语言不同,性能不同,并发不同,导致rabbitmq技术使用不稳定.引入交换机,只允许生产端发送消息时交给交换机.由交换机来处理后续发送队列并发逻辑.exchange是有erlang编写的.
队列组件:queue
真正存储消息对象的容器.一个rabbitmq中可以有多个队列,但是每个队列必须绑定一个交换机使用
4.运行rabbitmq登陆web控制台
4.1启动rabbitmq
登陆到云注机运行启动命令
[root@10-9-118-11 ~]# service rabbitmq-server start
4.2登陆控制台
使用rabbitmq启动的服务器ip地址,使用15672端口号,使用 guest/guest用户名密码登陆