RabbitMQ消息队列
目录
2.2.1客户端: 不同的工作模式,支持的客户端语言不同;分为消息的生产者,和消息的消费者;
一. 消息队列历史
消息队列:第三方的软件技术,实现多个系统间信息的异步通信(系统异步通信),实现系统的高并发缓存处理(消峰限流)
1.通信解耦合异步通信
系统与系统定义的接口通信
- 这种通信一般都是强耦合的;一旦传递信息的过程中出现任何问题.
- 可以因为A系统传递时失败,算法系统计算时异常,算法系统返回数据失败,都会导致整个传输,计算,返回的过程重新执行一遍.
- 需要引入一种异步通信的技术解决这个问题--消息队列;
通信解耦,同时由于消息队列的引入,可以在代码中执行发送消息,接收消息,处理消息的异步处理,不影响主要步骤的同步执行;
2.高并发的缓存--消峰限流
客户端高并发访问达到了服务器的极限,也不会直接断开拒绝,需要将请求的内容存放到一个消息队列中处理的; 秒杀
二.rabbitmq
2.1介绍
开源的技术,目前企业级别的常见消息队列;同类产品rocketMQ(rabbitmq类似 应用层到数据层之间使用的缓存消息队列),kafka(大数据收集数据的缓存消息队列)
2.2rabbitmq简介
一、RabbitMQ与Messaging
消息用于连接和扩展(scale)软件应用。应用可以作为一个大型应用的组件或者用户设备和数据互相连接起来。消息是一个通过分离发送和接收数据来达到解耦和异步的应用。消息的应用有数据发送的非阻塞操作或推送通知,发布/订阅模式,异步处理和工作队列等。
RabbitMQ就是一个消息的代理者,它为你的应用提供了一个公共的平台来发送和接收消息,同时给你的应用的消息提供一个安全的地方停留,直到被接收。
二、RabbitMQ的特点
1、可靠性(Reliability)
RabbitMQ提供很多特性供我们可以在性能和可靠性作出折中的选择,包括持久化、发送确认、发布者确认和高可用性等。
2、弹性选路(Flexible Routing)
消息在到达队列前通过交换(exchanges)来被选路。RabbitMQ为典型的选路逻辑设计了几个内置的交换类型。对于更加复杂的选路,我们可以将exchanges绑定在一起或者写属于自己的exchange类型插件。
3、集群化(Clustering)
在一个局域网内的几个RabbitMQ服务器可以集群起来,组成一个逻辑的代理人。
4、联盟(Federation)
对于那些需要比集群更加松散和非可靠连接的服务器来说,RabbitMQ提供一个联盟模型(Federation Model)
5、高可用队列(High Available Queue)
可以在一个集群里的几个机器里对队列做镜像,确保即时发生了硬件失效,你的消息也是安全的。
6、多客户端(Many Clients)
有各种语言的RabbitMQ客户端
7、管理UI(Management UI)
RabbitMQ提供一个易用的管理UI来监控和控制消息代理人的各个方面。
8、跟踪(Tracing)
如果你的消息系统行为异常,RabbitMQ提供跟踪支持来找出错误的根源。
9、插件系统(Plugin System)
RabbitMQ提供各种方式的插件扩展,我们可以实现自己的插件。
2.2.1客户端: 不同的工作模式,支持的客户端语言不同;分为消息的生产者,和消息的消费者;
2.2.2核心组件:
连接组件:connection底层长连接,channel信道短连接
- connection:一个对象对应一个进程
- channel:可以频繁的销毁和创建,对应一次使用;
2.3交换机
rabbitmq认为,支持的客户端语言非常多,并发能力不一致,如果生产消息的客户端直接连接某一个队列,会造成并发的不稳定,给技术处理带来问题;
基于erlang语言开发的交换机组件,收集所有高并发的消息发送客户端(生产者信息msg),统一处理;
队列:queue,内存的队列可以实现消息的持久化,队列的持久化;
队列不能单独存在,需要绑定交换机生存,每生成一个队列默认情况下都会绑定一个AMQP default的路由类型交换机,并且以队列的名称绑定路由;
最终使用的结构