搜索

4.4. 添加第三方 JAR 文件

download PDF

您可以在运行时将第三方 JAR 文件提供给 AMQ Broker。例如,如果您希望代理将消息存储在 JDBC 数据库中,您可以将代理配置为加载数据库所需的第三方 JAR 文件。

您必须配置 Operator,使第三方 JAR 文件在每个代理 pod 上的挂载卷上可用,并将 JAR 文件的卷路径添加到代理的 Java 类路径中。

如果 JAR 文件的大小小于 1 MB,您可以将 JAR 文件添加到 secret 或 configmap 中,并将 Operator 配置为将 JAR 文件挂载到每个代理 pod 上。如果 JAR 文件大于 secret 和 configmap 的 1 MB 限制,您可以将 Operator 配置为在每个代理 pod 上挂载共享卷,并将 JAR 文件下载到该卷。

4.4.1. 使用 secret 或配置映射在代理 pod 上挂载 JAR 文件

如果 JAR 文件小于 1 MB,您可以使用 secret 或配置映射来在每个代理 pod 上挂载第三方 JAR 文件。您还必须修改代理的 Java 类路径,以便从挂载的位置加载 JAR 文件。

以下流程假定您使用 secret 来挂载 JAR 文件。

流程

  1. 使用 oc create secret 命令创建一个包含要添加的第三方 JAR 文件的 secret。例如:

    oc create secret generic log4j-template --from-file=log4j-layout-template-json-2.22.1.jar

    有关如何创建 secret 的更多信息,请参阅 Kubernetes 文档中的 Secret

  2. 编辑代理部署的 CR,并将 Operator 配置为在每个代理 pod 上挂载包含第三方 JAR 文件的 secret。例如,以下配置挂载名为 log4j-template 的 secret。

    deploymentPlan:
      ...
      extraMounts:
        secrets:
        - "log4j-template"
      ...

    JAR 文件挂载到每个代理 pod 上的 /amq/extra/secrets/secret 名称 目录中。例如,/amq/extra/secrets/postgresql-driver/log4j-template.jar

  3. 创建 ARTEMIS_EXTRA_LIBS 环境变量来扩展代理的 Java 类路径,以便代理从每个 pod 上挂载的目录加载 JAR 文件。例如:

    spec:
      ...
      env:
      - name: ARTEMIS_EXTRA_LIBS
        value: /amq/extra/secrets/log4j-template
  4. 保存 CR。

4.4.2. 将 JAR 文件下载到每个代理 pod 上的卷

如果 JAR 文件大于 1 MB,则无法使用 secret 或配置映射将 JAR 文件挂载到每个代理 pod 上。相反,您可以将 Operator 配置为将 JAR 文件下载到 Operator 在每个代理 pod 上挂载的持久性卷中。

先决条件

持久性卷可用于挂载到每个代理 pod。

流程

  1. 编辑用于代理部署的 ActiveMQArtemis CR。
  2. 在 broker CR 中,使用 extraMountsextraVolumeMounts 属性添加持久性卷并在每个代理 pod 上挂载卷。例如:

    deploymentPlan:
      ...
      extraMounts:
      - name: extra-volume
        persistentVolumeClaim:
          claimName: extra-jars
      extraVolumeMounts:
      - name: extra-volume
        mountPath: /opt/extra-lib
      ...
  3. 使用 resourceTemplates 属性为部署自定义 StatefulSet 资源。在自定义中,使用 init 容器挂载您在每个 pod 上创建的 extra-volume 卷,并将 JAR 文件下载到卷。例如:

    spec:
      ...
      resourceTemplates:
      - selector:
          kind: StatefulSet
        patch:
          kind: StatefulSet
          spec:
            template:
              spec:
                initContainers:
                - name: mysql-jdbc-driver-init
                  volumeMounts:
                  - mountPath: /opt/extra-lib
                    name: extra-volume
                  image: curlimages/curl:8.6.0
                  command:
                  - /bin/sh
                  args:
                  - -c
                  - "if ! [ -f /opt/extra-lib/mysql-connector.jar ]; then curl https://repo1.maven.org/maven2/mysql/mysql-connector-java/8.0.23/mysql-connector-java-8.0.23.jar --output /opt/extra-lib/mysql-connector.jar ; fi"

    在示例中,如果该文件还没有位于卷中,则使用 curl 镜像将 mysql-connector.jar 文件下载到卷的挂载路径 /opt/extra-lib

  4. 创建 ARTEMIS_EXTRA_LIBS 环境变量来扩展代理的 Java 类路径,以便代理从共享卷加载 JAR 文件。例如:

    spec:
      ...
      env:
      - name: ARTEMIS_EXTRA_LIBS
        value: /opt/extra-lib
  5. 保存 CR。
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.