【发布时间】:2021-07-23 23:30:57
【问题描述】:
我有一个运行 GCP PubSub 消息传递的 Spring Cloud 应用程序。我有 2 个消息入站频道订阅了 2 个不同的订阅者。我在应用程序的负载/压力测试期间面临的问题是,特定的线程数设置如下:
spring.cloud.gcp.pubsub.subscriber.executor-threads: 350
spring.cloud.gcp.pubsub.subscriber.parallel-pull-count: 2
spring.cloud.gcp.pubsub.subscriber.max-acknowledgement-threads: 700
当通道 1 的消息拉取的进程繁忙时,我没有足够的线程让通道 2 拉取消息。解决方案是限制/配置每个通道的线程数。我发现很难弄清楚这一点。请帮帮我!以下是我所指的频道:
@Bean
@ServiceActivator(inputChannel = "pubsubInputChannel1")
public MessageHandler extractionMessageReceiver() {
return message -> {
// do something
};
}
@Bean
@ServiceActivator(inputChannel = "pubsubInputChannel2")
public MessageHandler extractionMessageReceiver() {
return message -> {
// do something
};
}
注意,订阅者线程会一直忙到某个特定进程被消息拉取结束。
【问题讨论】:
-
我熟悉 Cloud PubSub,但不熟悉 Spring。似乎问题主要与 Spring Service Activator 节流有关。也许将问题更改为“如何通过 inputChannel 限制 ServiceActivator 激活?”
标签: java spring spring-cloud google-cloud-pubsub java-threads