HiveMQ Prometheus 扩展 NoClassDefFoundError。无法启动扩展

我正在运行 hivemq mqtt 代理社区版,并希望添加用于监控的 prometheus 扩展。
两者都是从hivemq 市场github 项目页面预编译的。
我将这两个组件下载为 zip 文件,解压缩并使用此 dockerfile 将它们复制到 java 11 docker 容器中:

FROM alpine:3.10  AS TOOLCHAIN

ADD https://github.com/hivemq/hivemq-community-edition/releases/download/2019.1/hivemq-ce-2019.1.zip /opt/

ADD https://www.hivemq.com/releases/extensions/hivemq-prometheus-extension-4.0.1.zip /opt/

WORKDIR /opt

RUN unzip hivemq-ce-* -d ./

RUN unzip hivemq-prometheus-extension* -d ./

RUN rm -rf hivemq-ce-*.zip

RUN rm -rf hivemq-prometheus-extension*.zip

RUN mv ./hivemq-ce-* ./hivemq


FROM openjdk:11-jdk-slim

COPY --from=TOOLCHAIN /opt/hivemq /opt/hivemq

COPY --from=TOOLCHAIN /opt/hivemq-prometheus-extension /opt/hivemq/extensions/hivemq-prometheus-extension

WORKDIR /opt/hivemq/

CMD ["chmod","755","./bin/run.sh"]

CMD ["./bin/run.sh"]

我想我从操作方法中得到了正确的步骤,但是当我启动容器时docker build -t hive-test .; docker run -p 1883:1883 -p 9399:9399 -t hive-test出现错误。

我还下载了代理和扩展源代码,并尝试自己用 maven/gradle 和 java 11 编译它。但结果完全相同。

代理运行没有任何错误。

有谁知道这里出了什么问题?


鸿蒙传说
浏览 95回答 1
1回答

隔江千里

实际上,hivemq broker 社区版的依赖项不包含 ServletContextListener。我从github上下载了源码,修改了build.gradle文件。将以下代码片段的最后一行添加到 build.gradle 文件中:/* javax */[group: 'javax.activation', name: 'activation', version: '1.1.1'],[group: 'javax.validation', name: 'validation-api', version: '1.1.0.Final'],[group: 'javax.annotation', name: 'javax.annotation-api', version: '1.3.2'],[group: 'javax.servlet', name: 'javax.servlet-api', version: '4.0.1'],编译代理后解压结果并将预编译的扩展添加到扩展目录。错误消失了,扩展似乎在工作。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java