Java Spring Boot MVC 系列 (2):接收資料的 RabbitMQ 監聽器

EJ Feng
5 min readOct 29, 2020

做一個 RabbitMQ 監聽器來接收 RabbitMQ 的資料。

目標是可以接收 RabbitMQ 的資料,然後印出該資料。這樣子就是需要 RabbitMQ 監聽器!

建立新的 Spring 專案

Java Version 選 8,按 Next:

引用 dependency(附屬、依賴的東西),因為我們的目標是「接收 RabbitMQ 的資料,然後打到 Elasticsearch」,所以選擇「Spring for RabbitMQ」以及「Spring Data Elasticsearch」,按 Next:

按 Finish:

建立完成之後,在 STS 的最左邊會有 demo 的資料夾:

重要的檔案有:

  1. pom.xml 檔
  2. src/main/java 中的 java 檔案
  3. src/main/resources 中的 application.properties 檔案

pom.xml 檔案

pom.xml 就是 Maven 引用的檔案。剛剛引用了 RabbitMQ 跟 Elasticsearch,就可以在裡面找到對應的 dependency,例如「spring-boot-starter-amqp」、「spring-boot-starter-data-elasticsearch」,以及 spring boot 的一些測試用的東西:

DemoApplication.java 檔案

自動建立與專案名稱一樣的 application:

application.properties 檔案

所有的數據連線的設定檔,都是寫在這裡。例如連 RabbitMQ:

建立 RabbitMQ 監聽器 listener

在 src/main/java 按右鍵新增 Java Class:

建立好了之後會出現 RabbitMQListener.java 的空白檔案:

填入監聽器需要的 code:

實際上自己寫的截圖 (其實是一樣的)

其中「TEST2」是 RabbitMQ 的目標 queue 的名字,建立了名叫「receivedMessage」的方法,單純印出來而已,名字可以自己取名。

Message 是 Spring Boot 裡面的一個物件,可以做很多事情,例如將 message 轉型別 .toString()。

到 RabbitMQ 的 web 介面上看,會看到 queue TEST2 有 1 筆資料在那裡:

還可以在 print 後面加入下面這段把 message 轉成 map 的 code,可加可不加,就只是看想要對 message 做什麼而已:

這樣子監聽器就完成了。

接下來就是學「如何整理資料,把資料整理成想要打進 Elasticsearch 的樣子」。

解決紅色底線的問題

如果有紅色底線,可以到左邊 demo 專案點右鍵選擇「Properties > Java Build Path > Libraries」檢查,這次的解決方法是設定「JRE System Library」,並且使用 open source 的 JDK(Java 開發的套件):

安裝 Open Source 的 JDK

關鍵字是「AdoptOpenJDK」。到官網 adoptopenjdk.net 下載安裝,下圖是 Windows 的畫面:

不能再用一般的 Oracle Java SE 了,因為開始要收錢了。

要到 STS 去指定剛剛安裝好的 jdk hotspot。

執行 RabbitMQ 監聽器 listener

在 demo 專案按右鍵 Run As > Spring Boot App 即可執行。成功就可以看到印出「Received Message from RabbitMQ: (Body:’{“name”:”Pistol”,”title”:”hello”}’ MessageProperties…」的紅字。

實際上的 message 內容應該就是在 Body 裡面的「{“name”:”Pistol”,”title”:”hello”}」。

可以在 RabbitMQ 看到 TEST2 queue 原本有 1 筆資料,現在 0 筆了!因為被我的監聽器拿走了~

完成~~~:D

--

--