I am using ServiceBusProcessorClient and AmqpRetryOptions to connect my Azure Service Bus.
Facing two issues.
-
Consumer waits for 30 seconds to process the next message from ASB. Is this due to trytimeout settings? I set to 30 seconds as once we get a message from ASB we call an API and that can sometimes take 30 seconds to respond.
-
When I have concurrent sessions and max concurrent calls as 4, it will take 4 messages from ASB, but if one of them fails, in the exception block , I do a context.stop() which will stop the consumer and in this case, it will put all 4 messages back in ASB, rather then just the failed one. Any solution available?
Code configuration below , values just put as string for simplicity
ampqRetryOptions.setDelay(Duration.ofSeconds(Integer.parseInt(serviceBusConfig.getAmpqDelay())));
ampqRetryOptions.setMaxRetries(<5>);
ampqRetryOptions.setMaxDelay(<1>);
ampqRetryOptions.setMode(AmqpRetryMode.EXPONENTIAL);
ampqRetryOptions.setTryTimeout(<30 seconds>);
serviceBusProcessorClient = new ServiceBusClientBuilder()
.connectionString(connectioString).retryOptions(ampqRetryOptions)
.sessionProcessor().maxConcurrentSessions(4))
.maxConcurrentCalls(4))
.queueName(<queueName>)
.maxAutoLockRenewDuration(50 seconds)
.processMessage(onMessage()).disableAutoComplete()
.processError(onError)
.buildProcessorClient();