RabbitMQ的介紹/安裝和SpringBoot集成簡單使用(MacBook版)

RabbitMQ是什麼?
本來想老規矩百度圖鎮樓的,想了想算了,自己總結吧,把自己最真實的感受寫出。第一次接觸到RabbitMQ,是在我剛畢業的時候,還是個愣頭青,在一家外包公司傻乎乎的做CURD。有個秒殺場景,組長讓我使用RabbitMQ來做延時入庫,我懵逼了,完全沒聽說過的東西,於是去學,去用。後來在名創優品做一個用戶郵箱系統有個場景又順利用到了,所以實習生的經驗積累真的很重要~
rabbit,理解爲兔子,很快很快。
MQ,其實就是Message Queue (消息管道的英文縮寫)。管道隊列,理解成水管,先進先出,一邊進另外一邊出。但是裏面裝的不是水,是一些消息,具體是什麼消息,可以看你業務需求,可以是個Map,基本類型,String,一條SQL語句,一個定時任務,序列化後的對象等等都可以。全靠自己DIY~
RabbitMQ可以幹什麼用?
這個問題,網上太多太多了,隨便搜索一下優缺點一大堆,什麼削峯填谷,什麼延時加載,什麼跨項目跨進程跨線程跨數據庫進行數據傳輸。缺點就是導致項目可用性降低,MQ掛了相關服務也全掛之類的。沒用過的背背就好了,用過的可能都不用背了。

安裝RabbitMQ:

首先你的MACBook必須安裝了brew。
然後執行:brew install rabbitmq

在這裏插入圖片描述

配環境

輸入:sudo vi /etc/profile
填入:export RABBIT_HOME=/usr/local/Cellar/rabbitmq/3.7.15
export PATH=PATH:PATH:RABBIT_HOME/sbin

在這裏插入圖片描述

最後重啓一下配置讓它生效:source /etc/profile

啓動:rabbitmq-server -detached

看下是否啓動: rabbitmqctl status

有可能會出現瘋狂報錯(網上說是權限問題):

在這裏插入圖片描述

那就全部加個SUDO:
啓動:sudo rabbitmq-server -detached
查看狀態:sudo rabbitmqctl status

在這裏插入圖片描述

這樣就成功了,打開瀏覽器輸入:http://localhost:15672

看見這個可愛的兔子就是成功了:

在這裏插入圖片描述

下一步,SpringBoot集成:

依賴:

<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-amqp</artifactId>
			<version>1.5.2.RELEASE</version>
		</dependency>
寫個消息的發送端Service:
package com.example.demo.serivceImp;

import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.HashMap;
import java.util.Map;

@Service
public class RabbitMqService {
    @Autowired
    RabbitTemplate rabbitTemplate;

    public String sendData(int id, int password) {
        String channelNo = "jojo123";
        Map<String,Object> jojoMap = new HashMap<>();
        jojoMap.put("channelNo",channelNo);
        jojoMap.put("userId",id);
        jojoMap.put("password",password);
        rabbitTemplate.convertAndSend("jojo_channel",null,jojoMap);
        return channelNo;
    }
}

寫個Controller:
@Autowired
    private RabbitMqService rabbitMqService;

    @GetMapping("/rabbitMq")
    public void rabbitMq(){
        String s = rabbitMqService.sendData(1111, 22222);
        System.out.println("發送出去的:"+s);
    }
寫個消息的消費端Service(每次有新消息在管道里就自動輸出):
package com.example.demo.serivceImp;

import com.rabbitmq.client.Channel;
import org.springframework.amqp.rabbit.annotation.*;
import org.springframework.amqp.support.AmqpHeaders;
import org.springframework.messaging.handler.annotation.Headers;
import org.springframework.messaging.handler.annotation.Payload;
import org.springframework.stereotype.Component;

import java.io.IOException;
import java.util.Map;

@Component
public class RabbitAccept {
    @RabbitListener(
            bindings = @QueueBinding(
                    value = @Queue(value = "jojo_test_queue"),
                    exchange = @Exchange(value = "jojo_channel",type = "fanout")
            )
    )
    @RabbitHandler
    public void handle(@Payload Map<String,Object> dataMap, Channel channel, @Headers Map<String,Object> headers){

        try {
            System.out.println("接收到的:"+dataMap);
            Long tag = (Long)headers.get(AmqpHeaders.DELIVERY_TAG);
            channel.basicAck(tag,false);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

搞定收工!請求一下那個Controller,就可以看見:

在這裏插入圖片描述

這就證明已經發出去,然後又能從消息管道里拿回來了~這樣就行啦~
再看看http://localhost:15672:

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

可以看到我們測試用的管道和交換主機和頻道和賬號,在這裏都有詳細的記錄,我們可以看到哪些管道哪些交換機哪些頻道下的消息還沒消費等等情況。初步的使用就暫時先用到這裏啦~
最後關閉服務:sudo rabbitmqctl stop
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章