消息队列,是一种跨进程的通信机制,用于上下游传递消息。
RabbitMQ作用 流量消峰正常情况下订单系统每秒处理一万次订单,高峰期时,如果有两万次下单操作系统是处理不了的,此时可以使用消息队列做缓冲,把一秒内下的订单分散成一段时间来处理,先扣钱,当完成订单服务后通知用户即可,虽然不能做到及时通知,但是比不能下单的体验要好。
应用解耦订单系统的完成依赖有库存系统、物流系统、支付系统,当任何一个子系统出故障,都会造成下单操作异常。使用消息队列后,如果某个系统发生故障,可以将该系统要处理的内存被缓存在消息队列中,用户的下单操作可以正常完成。
异步处理有些服务间调用是异步的,例如 A 调用 B,B 需要花费很长时间执行,但是 A 需要知道 B 什么时候可以执行完.
使用队列后,调用 B 服务后,只需要监听 B 处理完成的消息,当 B 处理完成后,会发送一条消息给 MQ,MQ 会将此消息转发给 A 服务,能及时的得到异步处理成功的消息。
接收和分发消息的应用,RabbitMQ Server 就是 Message Broker
Virtual host当多个不同的用户使用同一个 RabbitMQ server 提供的服务时,可以划分出多个 vhost,每个用户在自己的 vhost 创建 exchange/queue 等
Connectionpublisher/consumer 和 broker 之间的 TCP 连接
ChannelChannel 是在 connection 内部建立的逻辑连接,Channel 作为轻量级的Connection 极大减少了操作系统建立 TCP connection 的开销
Exchangemessage 到达 broker 的第一站,根据分发规则,匹配查询表中的 routing key,分发消息到 queue 中去。常用的类型有:direct (point-to-point), topic (publish-subscribe) and fanout
(multicast)
消息最终被送到这里等待 consumer 取走
Bindingexchange和queue之间的虚拟连接,binding中可以包含routing key,Binding信息被保存到exchange中的查询表中,用于message的分发依据



