RabbitMQ简介

java rabbitmq 可以自动创建visualhost吗 rabbitmq可以创建多少个队列_持久化

RabbitMQ(Rabbit Message Queue),是由Erlang语言编写的,实现了高级消息队列协议(AMQP--Advanced Message Queuing Protocol)的开源消息代理软件。

RabbitMQ官网:https://www.rabbitmq.com/

其结构图如下:

java rabbitmq 可以自动创建visualhost吗 rabbitmq可以创建多少个队列_Erlang_02

  • Publisher:消息发布者
  • Connection:与RabbitMQ建立连接
  • Channel:通道,在客户端里每个连接里,可建立多个channel,一个channel代表一个对话
  • Broker:提供一种传输服务,维护生产者-服务端-消费者的路线,保证数据完整的传输
  • Virtual Host:虚拟主机,一个broker可以有多个vHost,分离不同权限的用户
  • Binding:把exchange和queue按照路由规则绑定起来
  • Exchange:消息交换机,接收消息并把消息路由到队列中
  • Queue:消息队列载体,一个消息可以投入到一个或多个队列。是消息的容器,也是消息的终点
  • Consumer:消息消费者

RabbitMQ的应用场景:

  1. 异步处理:将消息写入消息队列后直接返回,等需要时再进行处理。
  2. 流量削峰:秒杀或团抢活动中使用。服务器在接收用户请求后,先写入消息队列。加入消息队列长度超过最大数据量,直接跳转到错误页面。这样可以控制访问人数,避免短时间内的高流量导致系统超负荷而崩溃。
  3. 应用解耦:以电商为例,下单流程为:创建订单--->减库存--->仓库发货。若采用传统的方式,下单的过程需要等待调用商品服务返回调用结果,如果因网络原因使得商品服务减库存失败或者延迟,会带来较差的用户体验。假设减库存时操作报错,没有事务回滚的话还会造成数据不一致。在高并发的场景下显然是不合理的。采用消息队列的机制,消息发送者不用等待消息被成功处理才返回,而是立即返回。消息中间件负责处理网络通信,网络不通时,消息暂存在队列中,当网络畅通时再转发给相应的应用程序或服务进行下一步操作。既提高了并发量,也降低了服务间的耦合度。
  4. 日志处理:系统中有大量业务需要日志,但不要求实时性,可以采用消息队列来处理
  5. 消息通讯

RabbitMQ的特点:

  • 可靠性:通过队列持久化、交换器持久化
  • 灵活扩展:多个RabbitMQ可组成一个集群,队列可以在集群中的机器上设置镜像
  • 管理界面:RabbitMQ 提供了一个易用的用户界面,使得用户可以监控和管理消息 Broker 的许多方面
  • 支持多语言:RabbitMQ几乎支持所有的编程语言
  • 插件机制:RabbitMQ 提供了许多插件,可以来从多方面进行扩展