SpringBoot日記——MQ消息隊列整合(一)

  除了以前講到的緩存,咱們還會用到消息隊列來存儲一些消息,爲了提高系統的異步性能等等;html

  消息服務有兩個概念須要知道:消息代理-message broker,目的地-destination。消息發送由代理接管並傳遞到指定目的地:web

    —— 消息只有惟一的發送和接受者,消息從隊列中取出就不在了。redis

  目的地有兩種形式:queue-點對點的消息隊列、topic-發佈(publish)和訂閱(subscribe)的消息通訊主題;spring

    —— 發送一個消息主題,多個訂閱者經過監聽得知消息的發佈並取得;0docker

  我要介紹的以AMQP協議的RabbitMQ爲例:json

RabbitMQ

  

  1、基本概念及結構關係:

  Message-消息,它是由幾個屬性組成的,具有消息頭和消息體;windows

  Publish-消息生產者,向交換器發佈消息的一個應用程序;瀏覽器

  Exchange-交換器,接收消息,並把消息路由給服務器中的隊列,屬於分配的角色; Exchange有四種類型:direct、fanout、topic和headers。這四種轉發消息的策略有區別:緩存

  Queue-消息隊列,保存消息的容器,一個Broker中能夠有多個消息隊列;服務器

  Binding-綁定,將Exchange和Queue綁定;

  Connection-網絡鏈接,好比Tcp鏈接;

  Channel-信道,創建在TCP鏈接中的虛擬的,雙向數據流通道;AMQP命令就是經過信道將消息發送、發佈、訂閱和接收的;

  Consumer-消息接收者,也叫消息的消費者,用來接收和獲取消息的一端應用;

  Virtual Host-虛擬主機,每一個虛擬主機相對獨立,至關於一個獨立的mini的RabbitMQ服務器,默認是「/」;

  Broker-消息隊列服務器實體;

  這些基本概念的關係如圖:(不細說)

  

 

  2、運行機制:

  Exchange咱們上邊介紹了,有4種策略類型,其中header是對消息中的header進行匹配的,使用相對少。下邊主要介紹另外三種都是匹配路由鍵(routing key)的:

    direct:以單播的模式,若是發送的路由鍵和咱們綁定的key一致,那麼就發送到該隊列中。好比咱們發送aaa,那麼就只有介紹aaa的Queue的key纔會接收和取走這條消息,即徹底匹配、1v1收發;

    fanout:廣播模式發送消息到每個消息隊列中,不管路由鍵是什麼。好比咱們發送aaa,那麼不管有多少個消息隊列,咱們都發;

    topic:將咱們發出的消息,按照匹配規則模糊的來收發。好比,咱們發送aaa.bb,那麼咱們就發送到aaa.#和*.bb中,而不會發送到其餘好比ccc.#的消息隊列中;

        (*匹配一個單詞,#匹配0或多個單詞-好比aa.bb.cc)

    

RabbitMQ的安裝測試

  這裏介紹兩種安裝和啓用的方法:(windows和docker)

  1.windows環境下的安裝和使用:

  1)、在windows環境下,咱們須要先依賴一個ErLang的語言開發包,下載地址:http://www.erlang.org/downloads,根據你的系統選擇32或64位版本的安裝

  而後配置一下環境變量:

  ERLANG_HOME = C:\Program Files\er21.0  (你的安裝目錄)
  Path 中加入 %ERLANG_HOME%\bin;

  測一下是否安裝成功,以下圖,OK(輸入:erl)

  2)、下載和安裝RabbitMQ,下載地址:http://www.rabbitmq.com/download.html ,選擇windows版本

  一樣安裝和配置環境變量:

  RABBITMQ_SERVER = C:\Program Files\RabbitMQ Server\rabbitmq_server-3.7.1  (安裝目錄)
  在path中加入:%RABBITMQ_SERVER%\sbin;

  而後安裝插件-用來實現界面管理的,在命令行中輸入: rabbitmq-plugins.bat enable rabbitmq_management  (圖片是網上扒的,不要在乎細節~)

  啓動MQ服務,爲了防止異常狀況,咱們這裏要求使用管理員模式的命令行窗口輸入:

net stop RabbitMQ && net start RabbitMQ

  若是想中止服務:rabbitmq-service stop

 

  2.docker下的安裝和使用:

  1)、首先連接服務器,而後檢查鏡像,若是沒有MQ的,咱們去官方hub網站查看一下,咱們選擇標籤中帶有management的進行下載,這個是帶有web管理界面的;

  在服務器中鍵入該命令進行下載:

docker pull registry.docker-cn.com/library/rabbitmq:3-management

  這樣,鏡像就安裝好了。那麼咱們來啓動這個mq服務:(mq默認端口就是這兩個)

docker run -d -p 5672:5672 -p 15672:15672 --name myrabbitmq df0ee1f2343b

 

使用RabbitMQ的web管理界面

  使用上邊的方法,咱們成功的安裝和啓動了MQ服務,那麼咱們來使用web管理界面來檢查下,是否可使用吧。

  在瀏覽器的地址欄輸入(默認帳戶密碼是guest/guest,有須要本身再添加設置)

  ip:15672
  若是是windows本地搭建:localhost:15672
  若是是docker搭建的:xx.xx.xx.xx:15672  ip是服務器地址,能夠經過ip addr查看你服務器的ip地址

  登陸之後,能夠看到咱們以前講的那些字段,而後添加咱們須要的東西就能夠了,下邊不具體介紹,幾個圖本身領會一下吧~

  步驟:添加Exchange、添加Queue、進入Exchange綁定Queue、在Exchange內發送消息、到Queue中獲取該消息

   這裏單獨說一下關於topic鍵的輸入,按照以前說過的規則來寫:

 

    將RabbitMQ整合到SpringBoot中

  web客戶端咱們應該有一些瞭解了,那如何在代碼中應用呢?先來看如何作關聯,很簡單,在pom.xml中加入這一段:

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-amqp</artifactId>
        </dependency>

  1)、關於使用,這裏其實跟redis緩存同樣,咱們使用註解:

@EnableRabbit    //使用rabbitMQ的註解
@RabbitListener  //監聽rabbitMQ消息

  一樣,爲了獲得的數據是json格式的,咱們直接本身自定義一個類:

import org.springframework.amqp.rabbit.annotation.EnableRabbit;
import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
import org.springframework.amqp.support.converter.MessageConverter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
@EnableRabbit  //啓動rabbit註解
public class MyAMQPConfig {
  // 將消息以json格式傳遞
    @Bean
    public MessageConverter messageConverter() {
        return new Jackson2JsonMessageConverter();
    }
}

  來測試一下,咱們添加的MQ是否可用吧:……有點長,換下一篇文章=。=b

相關文章
相關標籤/搜索