【问题标题】:Creating ibm queue on container startup在容器启动时创建 ibm 队列
【发布时间】:2023-03-03 00:58:01
【问题描述】:

我使用带有 ibm mq 映像的 TestContainers。通过配置我设置了主机、端口、用户=应用程序、默认密码、管理器= QM1。我还有更多自定义队列,除了由容器创建的默认 DEV.QUEUE.1 - 3 之外,我还得启动我的队列。我发现像 withCommand 这样的运算符,接受字符串参数,并尝试将其设置为 .withCommand("sh","-c","runmqsc QM1 | define qlocal(LQ1) | end")https://www.ibm.com/docs/en/ibm-mq/7.5?topic=75-creating-queue-called-lq1 不幸的是,它似乎不是从它开始的。

我的完整代码相关:

 @Container
    static GenericContainer<?> mqContainer = new GenericContainer<>(DockerImageName.parse("ibmcom/mq"))
            .withEnv("LICENSE", "accept")
            .withEnv("MQ_QMGR_NAME", "QM1")
     /*       .withCommand("sh","-c","runmqsc")*/
            
            .withExposedPorts(1414)
            .withStartupTimeout(Duration.of(1, ChronoUnit.HALF_DAYS))
            .withLogConsumer(new Slf4jLogConsumer(log));

【问题讨论】:

  • 我想我应该在启动时输入有效命令来设置自定义队列并授予应用程序用户所需的权限。
  • 这让你在启动时运行 MQSC 命令:stackoverflow.com/questions/70480034/…
  • 你的命令应该更像这样.withCommand("sh","-c","echo 'define qlocal(LQ1)' | runmqsc QM1")
  • 命令不起作用,容器永远挂起。为配置队列编写额外的脚本似乎是非常不方便的配置方式。

标签: ibm-mq testcontainers


【解决方案1】:

ibmcom/mq 图像已经涵盖了这个场景。创建一个包含所有自定义资源的 mqsc 脚本。将此脚本复制到 /etc/mq 文件夹中。脚本中定义的所有资源都将在启动时创建。

详情请见Customizing the queue manager configuration

【讨论】:

    【解决方案2】:

    你的问题

    大概您希望.withCommand() 覆盖Dockerfile 的默认CMD。但是,由于 IBM MQ Dockerfile 使用ENTRYPOINT,我猜它不会覆盖命令,而是将参数作为参数附加到ENTRYPOINT 中指定的命令之后。
    这个博客解释得很好(但有一些错误):https://www.bmc.com/blogs/docker-cmd-vs-entrypoint/

    您似乎了解您需要使用管道将“define qlocal(LQ1)”转换为runmqsc,但您还没有完全掌握管道的工作原理,不幸的是您写的内容不正确,所以我建议您你可以找到更多关于它的信息。

    解决方案

    您可以使用mqContainer.execInContainer("bash", "-c", "echo 'define qlocal(LQ1)' | runmqsc QM1") 代替.withCommand() 行。但是,您需要在启动容器后运行它并等待容器启动并且 MQ 正在运行,这可以通过重复调用 mqContainer.execInContainer("chkmqready") 直到它的返回码为 0 来完成。就像容器的测试一样在其 Go 代码中执行:https://github.com/ibm-messaging/mq-container/blob/d7c7b52492c6b1ae600bf3b8ccd9724ffd45e361/test/docker/docker_api_test_util.go#L634
    使用https://www.testcontainers.org/features/startup_and_waits/ 可能有一种更优雅的方式来等待启动,但如果需要,我会把它留给你。

    替代解决方案

    自己构建 MQ 容器的个人版本。 https://www.ibm.com/docs/en/ibm-mq/9.2?topic=image-building-sample-configured-mq-queue-manager

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-04
      • 2021-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-20
      相关资源
      最近更新 更多