RabbitMq 深入了解

2022-08-24 04:42:19 字數 2446 閱讀 4373

積少成多 ----  僅以此致敬和我一樣在慢慢前進的人兒

問題一:什麼是rabbitmq

下面就是些個人的感受,

rabbitmq 就是乙個遵循amqp協議(這個是啥不清楚) 的訊息佇列的實現,用於伺服器和伺服器之間的連線,

producer可以傳送訊息到訊息佇列裡面,customer可以消費訊息佇列

兩者之間的方式有很多, 如常見的點對點(1v1)(專業術語:direct), 點對多(1v多)(專業術語:fanmout

轉化為大白話: a傳送一條訊息,這個訊息只有b能接受到,這就是點對點

a傳送一條訊息, 這個訊息b,c,d都可以接收到, 這個就是點對多

那麼問題來了: 為什麼要使用rabbitmq (使用場景是什麼)

非同步處理應用解耦流量削峰

在springboot 中如何使用呢?

我自己使用的docker 執行 rabbitmq的映象來做的,所以使用rabbitmq伺服器的具體安裝不太清楚

在springboot 中主要步驟如下:

1、 引入依賴 

org.springframework.boot

spring-boot-starter-amqp

2、 配置rabbitmq的連線(rabbit 本身就是乙個伺服器,它的連線方式就像jdbc連線資料一般)

# 配置rabbitmq的(可以自己檢視rabbitproperties 去檢視需要配置的項,以及預設的配置項)sring:

rabbitmq:

host: 192.168.3.48

port: 5672

virtual-host: /

username: guest

password: guest

3、發布訊息和接受訊息案例

# 發布訊息測試

@test

public void test()

# 消費訊息測試

@test

public void receive()

4、 使用@rabbitlistener 註解(這部分的詳細的使用邏輯以及原理一竅不通)

使用@rabbitlistener註解需要開啟rabbitmq註解

@enablerabbit@enablecaching

public static void main(string args)

}

使用案列如下:

@rabbitlistener(queues = "qf")public void receive(object person)

system.out.println();

system.out.println("接受人" + person);

system.out.println(person.tostring());

}}

該註解queues引數用於指定監聽的佇列,可以監聽多個佇列

該註解標註的方法的引數,用於匹配佇列裡面的訊息,如果裡面是相同型別的資料則直接進行資料封裝獲取,如果不一樣的

則不進行封裝,但是也會消費一條訊息。

白話就是:我取一條訊息,引數跟我對應那就給你,如果不相同那就不給你了,但是訊息我也取出來。

5、 注意事項:

在引入依賴的時候,其中rabbitautoconfiguration這個類 幫我們自動配置了很多東西,其中將訊息的body儲存到佇列中的序列化的方式也配置了

但是預設的序列化是序列化為byte陣列的方式儲存到佇列中,造成閱讀障礙

所以自己配置了他的messageconverter ,如下:

@configuration

public class myamqpconfig

}

目前因為只是了解的比較淺,所以只能記錄這些簡單的東西,待後面深入了解之後,

望你回來新增,這些資料

深入了解A

一 前言 在這裡我將對a 演算法的實際應用進行一定的 並且舉乙個有關a 演算法在最短路徑搜尋的例子。值得注意的是這裡並不對a 的基本的概念作介紹,如果你還對a 演算法不清楚的話,請看姊妹篇 初識a 演算法 這裡所舉的例子是參考amit主頁中的乙個源程式,使用這個源程式時,應該遵守一定的公約。二 a ...

深入了解A

一 前言 在這裡我將對a 演算法的實際應用進行一定的 並且舉乙個有關a 演算法在最短路徑搜尋的例子。值得注意的是這裡並不對a 的基本的概念作介紹,如果你還對a 演算法不清楚的話,請看姊妹篇 初識a 演算法 這裡所舉的例子是參考amit主頁中的乙個源程式,使用這個源程式時,應該遵守一定的公約。二 a ...

深入了解Dojo Data

譯自http www.sitepen.com blog 2010 10 13 dive into dojo data 使用dojo data有助於快速建立web應用的介面,且易於嵌入各種資料來源。它在使用者介面與底層資料之間提供了一層抽象層,使得使用者介面開發人員能夠專注於ui的開發,而無需擔心資料...