Spring Cloud Stream - 有没有办法自定义 StreamThread 线程名称?

Spring Cloud Stream - Is there a way to customize the StreamThread thread name?

我在当前项目中使用 Spring Cloud Stream(Kafka 作为活页夹),StreamThread 的默认线程名称让我很困扰,因为它很长。

这是它的样子:

<applicationId>-<GUID>-StreamThread-1
someEvent-578fb764-3fba-4a54-9a34-ea9796053530-StreamThread-1

使用这么长的线程名称,很难看到实际的日志消息。

想知道是否有配置线程名称的方法。

我已经尝试了下面的方法,但它不起作用:

@Bean
public ListenerContainerCustomizer<AbstractMessageListenerContainer<?, ?>> listenerCustomizer() {
    return (container, destinationName, group) -> {
        // Format to "[group].[destination]
        container.setBeanName(String.format("%s.%s", group, destinationName));
    };
}

也许我的配置有误?

旁注:我喜欢使用 Spring Cloud Stream,据我所知它很受欢迎。但这让我想知道为什么我得不到任何好的文档。

编辑: 通过在 application.properties.

中添加 spring.kafka.client-id 解决了问题

有了 client-idKafkaStreams 将使用用户定义的 client-id 作为线程名称。

您确定您使用的是普通 Kafka 活页夹,而不是 Kafka Streams 活页夹吗? StreamThread 的名字类似于 final String threadId = clientId + "-StreamThread-" + threadIdx;。请参阅 StreamThread 源代码。因此,您需要确定 clientId 传播到 Kafka Streams 的是什么。

请参见 StreamsConfig.CLIENT_ID_CONFIG,您可以通过 spring.cloud.stream.kafka.streams.binder.applicationId 属性 进行配置。

更新

好的。我在 KafkaStreams:

中找到了逻辑
    // The application ID is a required config and hence should always have value
    final String userClientId = config.getString(StreamsConfig.CLIENT_ID_CONFIG);
    final String applicationId = config.getString(StreamsConfig.APPLICATION_ID_CONFIG);
    if (userClientId.length() <= 0) {
        clientId = applicationId + "-" + processId;
    } else {
        clientId = userClientId;
    }
   ...
   final String baseName = clientId + "-StreamThread-";

因此,最终的线程名称完全基于 clientId

如果那个StreamsConfig.CLIENT_ID_CONFIG是空的,那就是在applicationId的基础上加上那个processId。这可能确实是您提到的 GUID。

因此考虑设置 StreamsConfig.CLIENT_ID_CONFIG 而不是 applicationId