rabbitmq连接池 java rabbitmq 长连接_rabbitmq连接池 java

  1. Broker
    我们知道如果要使用RabbitMQ,必须先要安装一个RabbitMQ服务。这个服务就是Broker,中文叫做代理,因为MQ服务器帮我们对消息做了存储和转发。一般情况下为了保证服务的高可用,需要多个Broker。
  2. Connection
    无论生产者或是服务者都需要与Broker建立连接,这个连接就是Connection,它是一个TCP的长连接。
  3. Channel
    为了节省服务器资源,避免建立太多的长连接,我们需要复用连接。于是就有了Channel的概念。我们可以在保持的TCP长连接里面去创建和释放Channel,从而减少资源的消耗。其中Channel是相互隔离的,不能共享。
  4. Queue
    连接到Broker以后,就可以收发消息了。在Broker上有一个对象用来存储消息,在RabbitMQ里就是Queue。实际上消息是存储在数据库里的,叫做Mnesia。
    Queue是生产者与消费者的纽带,生产者发送的消息到达队列,在队列中存储,消费者从队列中消费消息。
  5. Consumer
    Consumer是消费者,消费者如何消费消息呢?是主动从Broker上拉取呢?还是被动等Broker推过来呢?RabbitMQ实现了这两种方式。
  • 一种是Pull模式,即每隔一段时间获取一次消息,消息的实时性会有所降低,但同时消费的主动权在消费端,消费端可以根据自身情况什么时候去Pull。
  • 另一种方式Push模式,即生产者发送消息后,Broker就马上推送给消费者,消息保存在客户端,实时性要求高,但是如果消费端消费不过来就会造成消息积压。
  • 我们想象一下如果生产者的消息会发送到多个队列,这时候如果使用push的方式是不是需要多次push,这样无疑增加了生产者的成本。那如何处理呢?于是就又了Exchange。
  1. Exchange
    通过Exchange不管有多少个队列需要接收消息,我们都只需发送到Exchange就OK了,由它来根据具体的绑定规则分发到具体的队列。Exchange Type有直连(Direct)、通配(topic)、复制分发(Fanout)等