1

我无法获得一个简单的 hello-world 类型的 Spring Boot 应用程序来利用 Pulsar Log4j2 appender。在启动时它报告错误:

2021-05-14T15:34:23.549-05:00 [pulsar-client-io-6-1] 错误 oapciProducerImpl [applog-json] [pulsar-log4j2-appender-applog-json] 无法创建生产者:生产者名称'pulsar-log4j2-appender-applog-json' 已经连接到主题 2021-05-14 15:34:23,550 主要错误无法启动 pulsar manager org.apache.pulsar.client.api.PulsarClientException$ProducerBusyException:Producer with name 'pulsar-log4j2-appender-applog-json' 已经连接到 org.apache.pulsar.client.impl.ProducerBuilderImpl 的 org.apache.pulsar.client.api.PulsarClientException.unwrap(PulsarClientException.java:884) 的主题。在 org.apache.pulsar.log4j2.appender.PulsarManager.startup(PulsarManager.java:127) 在 org.apache.pulsar.log4j2.appender.PulsarAppender.start(PulsarAppender.java:187) 处创建(ProducerBuilderImpl.java:93) ...

我正在使用 Apache Pulsar 2.7.1 和 pulsar-log4j2-appender:2.6.3 (我尝试了其他版本的 appender,结果相同)。这与错误可能暗示的运行多个实例无关。在启动应用程序之前,我什至可以通过“pulsar-admin topics stats”验证当前没有连接到该主题的发布者。我使用 Pulsar Log4j2 appender 启动了一个 Spring Boot 应用程序实例,它会记录该错误并且不会向 Pulsar 发送数据。如果错误消息确实有效,则附加程序必须以某种方式在内部创建多个连接。有没有其他人遇到过这个并想出一个解决方案?这似乎是一件相当简单的尝试和做的事情,不应该如此复杂或挑剔。

我将示例项目发布到 GitHub,以便有人更轻松地对其进行测试。

git clone https://github.com/kelbyloden/pulsarLog4jTest.git
cd pulsarLog4jTest/
./gradlew clean build
./gradlew bootRun -Dapp.name=pulsarLog4jTest -Dlog.level=INFO -Dpulsar.host=localhost

编辑 pulsar.host 变量以反映 Pulsar 实例的主机名。这假定它位于 http://localhost:6650。这在 log4j2.xml 文件中被引用。当我执行此操作时,我得到了提到的错误。
注意我创建了另一个不使用 Spring Boot 的示例 Java 项目,它工作正常。它似乎与 Spring 依赖项有关。

4

1 回答 1

0

该错误Failed to create producer: Producer with name 'pulsar-log4j2-appender-applog-json' is already connected to topic表明代码可能已经执行了多次,或者代码的关闭逻辑没有正确关闭生产者。

可以分享一下代码吗?也许是一个简单的 Github repo 的链接等?你是如何运行代码的?

于 2021-05-14T21:21:42.517 回答