部署在PCF上的springboot应用如何从Websphere MQ读取消息

How can a springboot application deployed on PCF read messages from Websphere MQ

我正在开发一个 spring 启动应用程序,它将部署在关键的云铸造厂中,它需要 read/listen 到来自 Websphere MQ 的消息。有办法吗?

I'm developing a spring boot application that will be deployed in pivotal cloud foundry and it needs to read/listen to messages from Websphere MQ. Is there a way to do that?

是的,应该可以。您需要首先验证的是您具有从 CF 基础上的流量到 IBM MQ 的网络连接(DNS 解析、流量可路由且没有防火墙阻止访问)。

如果其中任何一个不起作用,您需要与您的网络或 MQ 管理员联系以获得允许的流量。

您可以通过 运行 cf ssh 验证以在您的 CF 基础上输入一个容器,然后使用 nc -v <IP> <port> 将尝试与您的 MQ 建立 TCP 连接 IP/port.如果您看到 netcat 指示已建立连接,那么您已经准备就绪。

除此之外,您只需开发 Spring 启动应用程序,就像您在其他任何地方部署 Spring 启动应用程序一样(即,您无需执行任何特定操作)。您可以将您的凭据放入 application.properties 或使用环境变量将凭据传递给您的应用程序。

如果你想更高级一些,你可以看看java-cfenv,它可以用来执行动态服务绑定,但你不必这样做。

通过服务绑定,您可以创建用户提供的服务 (cf cups) 并使用它来存储您的 IBM MQ 连接 info/creds。然后你 cf bind 你的应用程序的服务,你的应用程序将可以通过读取 VCAP_SERVICES 环境变量来访问绑定的凭据,java-cfenv 会自动为你完成。

使用服务绑定而不是将您的凭据放入 application.properties 或 env 变量的好处是您可以 cf unbind / cf bind 并非常轻松地移动服务。您需要做的就是重新启动您的应用程序,它就会开始使用新服务。

是的,你可以!按照这个教程起床和运行 - https://developer.ibm.com/languages/spring/tutorials/mq-jms-application-development-with-spring-boot/

更改硬编码队列以从 application.properties 中获取队列名称,例如

    @JmsListener(destination = "${queue.name}")
    public void receive(MyDataObject data) {
       ...
    }

其中 application.properties 会在所有其他必需的设置中,例如:

queue.name=DEV.QUEUE.2

有关您可以设置的属性的列表,请参阅 https://github.com/ibm-messaging/mq-jms-spring。剩下的只是 spring JMS。例如,如果您希望 Spring 执行对象编组/解组,请确保添加一个 MessageConverter,通常是 MappingJackson2MessageConverter

有一些指南可帮助您将 spring 应用程序部署到 Cloud Foundry:

从CF的角度-https://docs.cloudfoundry.org/buildpacks/java/getting-started-deploying-apps/gsg-spring.html

并且从Spring的角度来看——https://spring.io/guides/gs/sts-cloud-foundry-deployment/