I am using StreamingPull mechanism to receive messages from the Pub/Sub.
Here is only 2 overriding for default SubscriberFactory settings:
@Bean public SubscriberFactory subscriberFactory( GcpProjectIdProvider id, TransportChannelProvider channelProvider, CredentialsProvider credentialsProvider) throws IOException { PubSubConfiguration config = new PubSubConfiguration(); config.initialize(id.getProjectId()); config.getSubscriber().setParallelPullCount(2); //overriding1 config.getSubscriber().setMaxDurationPerAckExtension(0); //overriding2 DefaultSubscriberFactory factory = new DefaultSubscriberFactory(id, config); factory.setChannelProvider(channelProvider); factory.setPullEndpoint(url()); factory.setCredentialsProvider(credentialsProvider); return factory; }
The second overriding helps me to resolve this issue: https://stackoverflow.com/questions/77711978/my-subscriber-receive-a-message-from-gcp-subscription-w...
I don't have any other overriding, but when there is no trafic I get this picute of number_of_open_streaming_pull subscription metric:
I know that Pub/Sub prefers to avoid a long-running sticky connection and client library should reopens a StreamingPull connection.. It works well when there is an active traffic. Any advice I can achive a stable reopens even when there is no traffic?
I found some issues about this:
spring-attic/spring-cloud-gcp#1005 - resolved as internal pub/sub issue
spring-attic/spring-cloud-gcp#2552 - adviced to use Synchronous Pull, but I want to go further with Asynchronous pull because for my app lower latency and higher throughput are very important.
We use spring-cloud-gcp-pubsub:5.0