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-id
,KafkaStreams
将使用用户定义的 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
。
我在当前项目中使用 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-id
,KafkaStreams
将使用用户定义的 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
。