使用 Spring Boot 开发 MQ JMS 应用程序

栏目: Java · 发布时间: 5年前

内容简介:IBM MQ 包含一个MQ 使应用程序能够以可靠且可扩展的方式相互通信和共享数据,从而使一个应用程序与另一个应用程序解耦。这种方式有助于基于不同框架、语言、平台、云和位置运行的应用程序集成。本教程将介绍如何使用 MQ Spring JMS Starter 从 Spring Boot 应用程序访问 IBM MQ 服务器。本示例使用了一个在 Docker 容器中运行的本地 MQ 实例。您还可以使用IBM Cloud 上的 MQ 服务器。该应用程序包含一对示例 REST 端点,通过它们向 MQ 发送和获取消息。

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 部分:
    <dependency>
         <groupId>com.fasterxml.jackson.core</groupId>
         <artifactId>jacksonbdatabind</artifactId>
     </dependency>
     <dependency>
         <groupId>com.ibm.mq</groupId>
         <artifactId>mqbjmsbspringbbootbstarter</artifactId>
         <version>2.0.0</version>
     </dependency>
  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 发送和接收消息。

参考资料


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

图解网站分析(修订版)

图解网站分析(修订版)

[日] 小川卓 / 沈麟芸 / 人民邮电出版社 / 2014-10 / 69.00元

本书以图配文,结合实例详细讲解了如何利用从网站上获取的各种数据了解网站的运营状况,如何从数据中攫取最有用的信息,如何优化站点,创造更大的网站价值。本书适合各类网站运营人员阅读。 第1 部分介绍了进行网站分析必备的基础知识。第2 部分详细讲解了如何明确网站现状,发现并改善网站的问题。第3 部分是关于流量获取和网站内渠道优化的问题。第4 部分介绍了一些更加先进的网站分析方法,其中详细讲解了如何分......一起来看看 《图解网站分析(修订版)》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

URL 编码/解码
URL 编码/解码

URL 编码/解码

MD5 加密
MD5 加密

MD5 加密工具