rabbitmq一些概念

1、參考文檔

官網
RabbitMQ中文文檔

2、重要概念

2.1 virtual hosts

虛擬主機,一個虛擬主機相當於一個獨立的空間,虛擬主機之間是相互隔離、互不影響的。

2.2 producer

生產者,投遞消息的一方

2.3 consumer

消費者,接收消息的一方
消費者定義

DefaultConsumer consumer = new DefaultConsumer(channel) {
  @Override
  public void handleDelivery(String consumerTag, Envelope envelope, BasicProperties properties, byte[] body)
      throws IOException {
    System.out.println("接收到消息:" + new String(body, "UTF-8"));
    // 手動消息簽收
    channel.basicAck(envelope.getDeliveryTag(), false);
  }
};

2.4 connection

連接,生產者或者消費者與rabbit服務器之間建立的長連接(默認端口是5672)
建立連接的過程如下

// 1.定義連接工廠
ConnectionFactory factory = new ConnectionFactory();
// 2.設置服務器地址
factory.setHost("127.0.0.1");
// 3.設置協議端口號
factory.setPort(5672);
// 4.設置vhost
factory.setVirtualHost("/test");
// 5.設置用戶名稱
factory.setUsername("test");
// 6.設置用戶密碼
factory.setPassword("test");
// 7.創建新的連接
Connection connection = factory.newConnection();

2.5 channel

通道,主要用於投遞消息和接收消息
常見api

// 創建通道
Channel channel = connection.createChannel();

// 創建隊列聲明
// 注意:第二個參數爲是否持久化,true:持久化,false:不持久化。持久化的隊列數據,會存到硬盤上,在rabbitmq重啓或者宕機後,還會保留。
channel.queueDeclare("queue", false, false, false, null);

// 交換機與隊列綁定
channel.queueBind("queue", "exchange", "routingKey");

// 綁定交換機
// 注意:第二個參數爲交換機類型,【direct,fanout,topic,headers】
channel.exchangeDeclare("exchange", "fanout");

// 發送消息
channel.basicPublish("exchange", "routingKey", null, "msg".getBytes());

// 消息流量控制
channel.basicQos(1);

// 綁定消費者
// 注意:第二個參數false:表示需要手動簽收消息;如果爲true,自動簽收消息
channel.basicConsume(queue, false, consumer);
// 手動簽收消息
channel.basicAck(envelope.getDeliveryTag(), false);

2.6 exchange

交換器,指定消息路由規則,發送到哪個隊列

交換機種類

  1. direct:簡單隊列與工作隊列使用此交換機類型

可以不綁定交換機,使用默認的交換機即可,把消息路由到那些RouteKey與queue名字完全一致的Queue中。

  1. fanout:發佈訂閱用的此類型交換機

不處理RouteKey ,綁定【fanout】類型交換機,把所有發送到fanout Exchange的消息都轉發到與該Exchange 綁定(Binding)的所有Queue上

  1. topic:主題模式

綁定【topic】類型交換機,會根據RouteKey匹配規則來轉發消息到對應的隊列中
RouteKey主要有兩個通配符:*,匹配一個單詞;#,匹配一個到多個單詞

  1. headers

根據發送的消息內容中的headers屬性進行匹配。未實際測試

2.7 queue

隊列,交換器接收到消息後,會根據路由規則,投遞到一個或者多個隊列中;如果按路由策略找不到對應的隊列,消息會被丟棄。

2.8 bindding

綁定關係,綁定交換機、隊列,並設置路由策略。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章