4.4. 添加第三方 JAR 文件
您可以在运行时将第三方 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 文件。
流程
使用
oc create secret
命令创建一个包含要添加的第三方 JAR 文件的 secret。例如:oc create secret generic log4j-template --from-file=log4j-layout-template-json-2.22.1.jar
有关如何创建 secret 的更多信息,请参阅 Kubernetes 文档中的 Secret。
编辑代理部署的 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
。创建
ARTEMIS_EXTRA_LIBS
环境变量来扩展代理的 Java 类路径,以便代理从每个 pod 上挂载的目录加载 JAR 文件。例如:spec: ... env: - name: ARTEMIS_EXTRA_LIBS value: /amq/extra/secrets/log4j-template
- 保存 CR。
4.4.2. 将 JAR 文件下载到每个代理 pod 上的卷
如果 JAR 文件大于 1 MB,则无法使用 secret 或配置映射将 JAR 文件挂载到每个代理 pod 上。相反,您可以将 Operator 配置为将 JAR 文件下载到 Operator 在每个代理 pod 上挂载的持久性卷中。
先决条件
持久性卷可用于挂载到每个代理 pod。
流程
-
编辑用于代理部署的
ActiveMQArtemis
CR。 在 broker CR 中,使用
extraVolumes
和extraVolumeMounts
属性来添加持久性卷,并在每个代理 pod 上挂载卷。例如:deploymentPlan: ... extraVolumes: - name: extra-volume persistentVolumeClaim: claimName: extra-jars extraVolumeMounts: - name: extra-volume mountPath: /opt/extra-lib ...
使用
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
。创建
ARTEMIS_EXTRA_LIBS
环境变量来扩展代理的 Java 类路径,以便代理从共享卷加载 JAR 文件。例如:spec: ... env: - name: ARTEMIS_EXTRA_LIBS value: /opt/extra-lib
- 保存 CR。