使用 Spring Boot 開發 MQ JMS 應用程序

收藏待读

使用 Spring Boot 開發 MQ JMS 應用程序

IBM MQ 包含一個 Spring Boot Starter ,使 Spring 開發人員能輕鬆地配置 IBM MQ JMS 包。

MQ 使應用程序能夠以可靠且可擴展的方式相互通信和共享數據,從而使一個應用程序與另一個應用程序解耦。這種方式有助於基於不同框架、語言、平台、雲和位置運行的應用程序集成。

免費試用 IBM Cloud

利用IBM Cloud Lite 快速輕鬆地構建您的下一個應用程序。您的免費帳戶從不過期,而且您會獲得 256 MB 的 Cloud Foundry 運行時內存和包含 Kubernetes 集群的 2 GB 存儲空間。了解所有細節並確定如何開始。如果您不熟悉 IBM Cloud,請查閱 developerWorks 上的 IBM Cloud Essentials 課程

學習目標

本教程將介紹如何使用 MQ Spring JMS Starter 從 Spring Boot 應用程序訪問 IBM MQ 服務器。本示例使用了一個在 Docker 容器中運行的本地 MQ 實例。您還可以使用IBM Cloud 上的 MQ 服務器。該應用程序包含一對示例 REST 端點,通過它們向 MQ 發送和獲取消息。

您將執行以下步驟:

  • 使用 Spring Initializr 創建一個 Spring Boot 應用程序
  • 使用 Docker 啟動一個本地 MQ 服務器
  • 將 MQ 服務器配置(憑證和 URL)添加到您的應用程序
  • 將 MQ Spring Starter 添加到您的應用程序
  • 添加一個發送消息的 REST 端點
  • 添加一個獲取消息的 REST 端點
  • 構建該應用,調用 REST 端點並顯示來自 MQ 的結果。

前提條件

  • 您的計算機上已安裝 Maven 和 Java。您能夠構建並運行基於 Maven 的 Spring Initializr 項目。
  • 您的計算機上已安裝 Docker。您能夠啟動/停止容器,並對 Docker 有一般性的了解。

預估時間

本教程大約需要 1 小時。

Spring Initializr 頁面上,使用 Java 語言和 Web 依賴生成一個 Maven Project 。對於本示例,我們使用了組 com.example 和工件 mq-spring。下載該項目並將其解壓縮。

使用 Spring Boot 開發 MQ JMS 應用程序

使用 Spring Boot 開發 MQ JMS 應用程序

第 2 步. 使用 Docker 啟動一個本地 MQ 服務器

IBM MQ for Developers 容器提供了一種便捷的方式來通過 Docker 啟動本地 MQ 服務器。您可以使用以下命令來啟動該服務器:

docker run bbenv LICENSE=accept bbenv MQ_QMGR_NAME=QM1 
           bbpublish 1414:1414 
           bbpublish 9443:9443 
           bbdetach 
           ibmcom/mq

使用 docker ps 檢查服務器是否正在運行:

$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                                            NAMES
3a225c721428        ibmcom/mq           "runmqdevserver"    4 hours ago        Up 4 hours         0.0.0.0:1414b>1414/tcp, 0.0.0.0:9443b>9443/tcp   reverent_bartik

第 3 步. 將 MQ 服務器配置(憑證和 URL)添加到您的應用程序

本地 MQ 服務器的默認配置包含用戶 admin 和密碼 passw0rd 。可通過正常的 Spring application.properties 文件將此信息傳遞給應用程序。

編輯解壓縮後的 Spring Initializr 項目,並將包含以下屬性名稱和值的服務器信息添加到 src/main/resources/application.properties 文件:

ibm.mq.queueManager=QM1
ibm.mq.channel=DEV.ADMIN.SVRCONN
ibm.mq.connName=localhost(1414)
ibm.mq.user=admin
ibm.mq.password=passw0rd

注意: 不建議將憑證存儲在您的應用程序中。我們這樣做只是為了簡化本教程。MQ Spring Boot Starter 可以利用其他屬性來源,比如環境變量等。

第 4 步. 將 MQ Spring Starter 添加到您的應用程序

對於本示例,我們將創建一個簡單的 REST 應用程序,其中一個端點將通過 MQ 服務器發送消息,另一個端點獲取並返回已發送的消息。

編輯解壓縮後的 Spring Boot 項目,以執行以下更改:

  1. 將以下依賴添加到 pom.xml 的 dependency 部分:
         com.fasterxml.jackson.core
         jacksonbdatabind
     
     
         com.ibm.mq
         mqbjmsbspringbbootbstarter
         2.0.0
     
  2. 向使用 Spring Initializr 創建的 Spring Boot 應用程序類添加註解 – com/example/mqpring/MqspringApplication.java 。(注意,Java 包和類名來自在 Initializr 上輸入的 Group 和 Artifact 值。)
    • 添加 @RestController 來啟用 REST 端點。
    • 添加 @EnableJms 來允許發現帶 @JmsListener 註解的方法
  3. JmsTemplate 對象添加一個 @Autowired 註解。IBM MQ Spring Boot Starter 使用通過 application.properties 配置的屬性來創建 JmsTemplate
    @SpringBootApplication
     @RestController
     @EnableJms
     public class MqspringApplication {
    
         @Autowired
         private JmsTemplate jmsTemplate;
    
         public static void main(String[] args) {
             SpringApplication.run(MqspringApplication.class, args);
         }
    
     }

第 5 步. 添加一個通過 MQ 發送消息的 REST 端點

添加一個包含 @GetMapping 註解和 send 路徑的 REST 端點。使用 JmsTemplate convertAndSend 方法向隊列 DEV.QUEUE.1 發送一條 Hello World! 消息。根據需要添加異常處理。

@GetMapping("send")
String send(){
    try{
        jmsTemplate.convertAndSend("DEV.QUEUE.1", "Hello World!");
        return "OK";
    }catch(JmsException ex){
        ex.printStackTrace();
        return "FAIL";
    }
}

注意: 隊列 DEV.QUEUE.1 已通過 IBM MQ for Developers 容器預先創建。本教程簡化了該方法,實際的應用程序可能具有更完善的異常處理能力,而且可能使用有類型對象作為消息有效負載。請參閱 Spring 指南: 使用 JMS 進行傳遞消息 了解更多信息。

第 6 步. 添加一個通過 MQ 獲取消息的 REST 端點

添加一個包含 @GetMapping 註解和 recv 路徑的 REST 端點。使用 JmsTemplate receiveAndConvert 方法接收來自隊列 DEV.QUEUE.1 的消息。根據需要添加異常處理。

@GetMapping("recv")
String recv(){
    try{
        return jmsTemplate.receiveAndConvert("DEV.QUEUE.1").toString();
    }catch(JmsException ex){
        ex.printStackTrace();
        return "FAIL";
    }
}

注意: JmsTemplate 接收方法一直處於阻塞狀態!(您可以這樣嘗試:在調用 send 之前調用 recv 端點,那麼直到 send 被調用才會返回異常,取消接收調用阻塞。)對於非阻塞替代方案,請考慮使用 @JmsListener

第 7 步. 構建該應用程序,調用 REST 端點並顯示結果

使用以下命令構建並運行您的應用程序:

mvn package spring-boot:run

現在可以調用用來發送消息的 REST 端點 http://localhost:8080/send 。您應該會看到來自您的端點的 OK 回復,確認消息已發送。

發送消息後,您可以調用用來接收消息的 REST 端點 http://localhost:8080/recv 。您應該會看到來自該端點的包含消息內容 "Hello World!" 的回復。

結束語

IBM MQ Spring Starter 能夠讓我們輕鬆地使用 Spring JmsTemplate API 以及 Spring 自動配置功能向 MQ Service 發送和接收消息。

參考資料

原文 : IBM developerWorks中國

相關閱讀

免责声明:本文内容来源于IBM developerWorks中國,已注明原文出处和链接,文章观点不代表立场,如若侵犯到您的权益,或涉不实谣言,敬请向我们提出检举。