【问题标题】:Pulsar Log4j2 Appender error: Producer with name 'pulsar-log4j2-appender-applog-json' is already connected to topicPulsar Log4j2 Appender 错误:名称为“pulsar-log4j2-appender-applog-json”的生产者已连接到主题
【发布时间】:2021-08-05 00:15:54
【问题描述】:

我无法获得一个简单的 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 主要错误无法启动脉冲星管理器 org.apache.pulsar.client.api.PulsarClientException$ProducerBusyException:名为“pulsar-log4j2-appender-applog-json”的生产者已连接到主题 在 org.apache.pulsar.client.api.PulsarClientException.unwrap(PulsarClientException.java:884) 在 org.apache.pulsar.client.impl.ProducerBuilderImpl.create(ProducerBuilderImpl.java:93) 在 org.apache.pulsar.log4j2.appender.PulsarManager.startup(PulsarManager.java:127) 在 org.apache.pulsar.log4j2.appender.PulsarAppender.start(PulsarAppender.java:187) ...

我正在使用 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 依赖项有关。

【问题讨论】:

    标签: log4j2 appender apache-pulsar pulsar


    【解决方案1】:

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

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

    【讨论】:

    • 我能够通过使用 Spring Guides 的 hello world spring boot 应用程序来重现这一点。重现步骤:
    • 我能够通过使用 Spring Guides 的 hello world spring boot 应用程序来重现这一点。重现步骤: 1. git clone github.com/spring-guides/gs-spring-boot.git 2. 使用 pulsar appender 添加 complete/src/main/resources/log4j2.xml 3. 编辑 build.gradle 以排除所有现有条目上的 spring-boot-starter-logging 并添加: implementation 'org.apache.pulsar:pulsar-log4j2-appender:2.6.3' 4. 向 HelloController.java 添加一条日志语句 5. 在“complete”文件夹中:./gradlew build java -jar build/libs/spring- boot-0.0.1-SNAPSHOT.jar
    • 示例 log4j2.xml 内容:
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多