Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[BUG] Message sending in ServiceBus queue occasionally fails with error "Cannot send a message when request response channel is disposed" or "Timeout on blocking read" #43877

Open
s-vivien opened this issue Jan 22, 2025 · 9 comments
Assignees
Labels
Client This issue points to a problem in the data-plane of the library. customer-reported Issues that are reported by GitHub users external to the Azure organization. needs-team-attention Workflow: This issue needs attention from Azure service team or SDK team question The issue doesn't require a change to the product in order to be resolved. Most issues start as that Service Bus

Comments

@s-vivien
Copy link

s-vivien commented Jan 22, 2025

Describe the bug
My application is deployed on Azure (App Service). This application regularly sends messages to a ServiceBus queue. Most of the time it works fine, but sometimes during an hour or so, most of the sending would fail with one of the following error (see stack traces).
When it fails, the client does not retry to send the message.

Exception or Stack Trace

com.azure.messaging.servicebus.ServiceBusException: Cannot send a message when request response channel is disposed. ConnectionId:MF_bcef72_1737541515971
	at com.azure.messaging.servicebus.ServiceBusSenderAsyncClient.mapError(ServiceBusSenderAsyncClient.java:934)
	at reactor.core.publisher.Mono.lambda$onErrorMap$29(Mono.java:3862)
	at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onError(FluxOnErrorResume.java:94)
	at io.opentelemetry.javaagent.shaded.instrumentation.reactor.v3_1.TracingSubscriber.onError(TracingSubscriber.java:85)
	at reactor.core.publisher.MonoFlatMap$FlatMapMain.onError(MonoFlatMap.java:180)
	at io.opentelemetry.javaagent.shaded.instrumentation.reactor.v3_1.TracingSubscriber.onError(TracingSubscriber.java:85)
	at reactor.core.publisher.FluxHide$SuppressFuseableSubscriber.onError(FluxHide.java:142)
	at reactor.core.publisher.MonoPeekTerminal$MonoTerminalPeekSubscriber.onError(MonoPeekTerminal.java:258)
	at io.opentelemetry.javaagent.shaded.instrumentation.reactor.v3_1.TracingSubscriber.onError(TracingSubscriber.java:85)
	at reactor.core.publisher.SerializedSubscriber.onError(SerializedSubscriber.java:124)
	at reactor.core.publisher.FluxRetryWhen$RetryWhenMainSubscriber.whenError(FluxRetryWhen.java:229)
	at reactor.core.publisher.FluxRetryWhen$RetryWhenOtherSubscriber.onError(FluxRetryWhen.java:279)
	at io.opentelemetry.javaagent.shaded.instrumentation.reactor.v3_1.TracingSubscriber.onError(TracingSubscriber.java:85)
	at io.opentelemetry.javaagent.shaded.instrumentation.reactor.v3_1.TracingSubscriber.onError(TracingSubscriber.java:85)
	at reactor.core.publisher.FluxContextWrite$ContextWriteSubscriber.onError(FluxContextWrite.java:121)
	at io.opentelemetry.javaagent.shaded.instrumentation.reactor.v3_1.TracingSubscriber.onError(TracingSubscriber.java:85)
	at reactor.core.publisher.FluxConcatMapNoPrefetch$FluxConcatMapNoPrefetchSubscriber.maybeOnError(FluxConcatMapNoPrefetch.java:327)
	at reactor.core.publisher.FluxConcatMapNoPrefetch$FluxConcatMapNoPrefetchSubscriber.onNext(FluxConcatMapNoPrefetch.java:212)
	at io.opentelemetry.javaagent.shaded.instrumentation.reactor.v3_1.TracingSubscriber.onNext(TracingSubscriber.java:68)
	at reactor.core.publisher.FluxContextWrite$ContextWriteSubscriber.onNext(FluxContextWrite.java:107)
	at reactor.core.publisher.SinkManyEmitterProcessor.drain(SinkManyEmitterProcessor.java:476)
	at reactor.core.publisher.SinkManyEmitterProcessor$EmitterInner.drainParent(SinkManyEmitterProcessor.java:620)
	at reactor.core.publisher.FluxPublish$PubSubInner.request(FluxPublish.java:874)
	at reactor.core.publisher.FluxContextWrite$ContextWriteSubscriber.request(FluxContextWrite.java:136)
	at reactor.core.publisher.FluxConcatMapNoPrefetch$FluxConcatMapNoPrefetchSubscriber.request(FluxConcatMapNoPrefetch.java:337)
	at reactor.core.publisher.FluxContextWrite$ContextWriteSubscriber.request(FluxContextWrite.java:136)
	at reactor.core.publisher.Operators$DeferredSubscription.request(Operators.java:1743)
	at reactor.core.publisher.FluxRetryWhen$RetryWhenMainSubscriber.onError(FluxRetryWhen.java:196)
	at io.opentelemetry.javaagent.shaded.instrumentation.reactor.v3_1.TracingSubscriber.onError(TracingSubscriber.java:85)
	at reactor.core.publisher.SerializedSubscriber.onError(SerializedSubscriber.java:124)
	at reactor.core.publisher.FluxTimeout$TimeoutMainSubscriber.onError(FluxTimeout.java:220)
	at io.opentelemetry.javaagent.shaded.instrumentation.reactor.v3_1.TracingSubscriber.onError(TracingSubscriber.java:85)
	at reactor.core.publisher.FluxPeekFuseable$PeekFuseableSubscriber.onError(FluxPeekFuseable.java:234)
	at io.opentelemetry.javaagent.shaded.instrumentation.reactor.v3_1.TracingSubscriber.onError(TracingSubscriber.java:85)
	at reactor.core.publisher.FluxHide$SuppressFuseableSubscriber.onError(FluxHide.java:142)
	at reactor.core.publisher.MonoFlatMap$FlatMapMain.secondError(MonoFlatMap.java:241)
	at reactor.core.publisher.MonoFlatMap$FlatMapInner.onError(MonoFlatMap.java:315)
	at io.opentelemetry.javaagent.shaded.instrumentation.reactor.v3_1.TracingSubscriber.onError(TracingSubscriber.java:85)
	at reactor.core.publisher.MonoFlatMap$FlatMapMain.secondError(MonoFlatMap.java:241)
	at reactor.core.publisher.MonoFlatMap$FlatMapInner.onError(MonoFlatMap.java:315)
	at io.opentelemetry.javaagent.shaded.instrumentation.reactor.v3_1.TracingSubscriber.onError(TracingSubscriber.java:85)
	at reactor.core.publisher.FluxMap$MapSubscriber.onError(FluxMap.java:134)
	at io.opentelemetry.javaagent.shaded.instrumentation.reactor.v3_1.TracingSubscriber.onError(TracingSubscriber.java:85)
	at reactor.core.publisher.FluxMap$MapSubscriber.onError(FluxMap.java:134)
	at io.opentelemetry.javaagent.shaded.instrumentation.reactor.v3_1.TracingSubscriber.onError(TracingSubscriber.java:85)
	at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.onError(MonoIgnoreThen.java:280)
	at io.opentelemetry.javaagent.shaded.instrumentation.reactor.v3_1.TracingSubscriber.onError(TracingSubscriber.java:85)
	at reactor.core.publisher.MonoWhen$WhenInner.onError(MonoWhen.java:423)
	at io.opentelemetry.javaagent.shaded.instrumentation.reactor.v3_1.TracingSubscriber.onError(TracingSubscriber.java:85)
	at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onError(FluxMapFuseable.java:142)
	at io.opentelemetry.javaagent.shaded.instrumentation.reactor.v3_1.TracingSubscriber.onError(TracingSubscriber.java:85)
	at reactor.core.publisher.FluxHide$SuppressFuseableSubscriber.onError(FluxHide.java:142)
	at reactor.core.publisher.MonoFlatMap$FlatMapMain.secondError(MonoFlatMap.java:241)
	at reactor.core.publisher.MonoFlatMap$FlatMapInner.onError(MonoFlatMap.java:315)
	at io.opentelemetry.javaagent.shaded.instrumentation.reactor.v3_1.TracingSubscriber.onError(TracingSubscriber.java:85)
	at reactor.core.publisher.MonoFlatMap$FlatMapMain.secondError(MonoFlatMap.java:241)
	at reactor.core.publisher.MonoFlatMap$FlatMapInner.onError(MonoFlatMap.java:315)
	at io.opentelemetry.javaagent.shaded.instrumentation.reactor.v3_1.TracingSubscriber.onError(TracingSubscriber.java:85)
	at reactor.core.publisher.MonoFlatMap$FlatMapMain.secondError(MonoFlatMap.java:241)
	at reactor.core.publisher.MonoFlatMap$FlatMapInner.onError(MonoFlatMap.java:315)
	at io.opentelemetry.javaagent.shaded.instrumentation.reactor.v3_1.TracingSubscriber.onError(TracingSubscriber.java:85)
	at reactor.core.publisher.Operators$MultiSubscriptionSubscriber.onError(Operators.java:2236)
	at io.opentelemetry.javaagent.shaded.instrumentation.reactor.v3_1.TracingSubscriber.onError(TracingSubscriber.java:85)
	at reactor.core.publisher.FluxHandle$HandleSubscriber.onError(FluxHandle.java:213)
	at reactor.core.publisher.Operators.error(Operators.java:198)
	at reactor.core.publisher.MonoError.subscribe(MonoError.java:53)
	at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:76)
	at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:165)
	at io.opentelemetry.javaagent.shaded.instrumentation.reactor.v3_1.TracingSubscriber.onNext(TracingSubscriber.java:68)
	at reactor.core.publisher.FluxSwitchIfEmpty$SwitchIfEmptySubscriber.onNext(FluxSwitchIfEmpty.java:74)
	at io.opentelemetry.javaagent.shaded.instrumentation.reactor.v3_1.TracingSubscriber.onNext(TracingSubscriber.java:68)
	at io.opentelemetry.javaagent.shaded.instrumentation.reactor.v3_1.TracingSubscriber.onNext(TracingSubscriber.java:68)
	at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onNext(FluxOnErrorResume.java:79)
	at io.opentelemetry.javaagent.shaded.instrumentation.reactor.v3_1.TracingSubscriber.onNext(TracingSubscriber.java:68)
	at reactor.core.publisher.FluxPeekFuseable$PeekFuseableSubscriber.onNext(FluxPeekFuseable.java:210)
	at io.opentelemetry.javaagent.shaded.instrumentation.reactor.v3_1.TracingSubscriber.onNext(TracingSubscriber.java:68)
	at reactor.core.publisher.FluxHide$SuppressFuseableSubscriber.onNext(FluxHide.java:137)
	at reactor.core.publisher.MonoPeekTerminal$MonoTerminalPeekSubscriber.onNext(MonoPeekTerminal.java:180)
	at io.opentelemetry.javaagent.shaded.instrumentation.reactor.v3_1.TracingSubscriber.onNext(TracingSubscriber.java:68)
	at reactor.core.publisher.FluxHide$SuppressFuseableSubscriber.onNext(FluxHide.java:137)
	at reactor.core.publisher.FluxPeekFuseable$PeekFuseableSubscriber.onNext(FluxPeekFuseable.java:210)
	at io.opentelemetry.javaagent.shaded.instrumentation.reactor.v3_1.TracingSubscriber.onNext(TracingSubscriber.java:68)
	at reactor.core.publisher.FluxHide$SuppressFuseableSubscriber.onNext(FluxHide.java:137)
	at reactor.core.publisher.MonoPeekTerminal$MonoTerminalPeekSubscriber.onNext(MonoPeekTerminal.java:180)
	at io.opentelemetry.javaagent.shaded.instrumentation.reactor.v3_1.TracingSubscriber.onNext(TracingSubscriber.java:68)
	at reactor.core.publisher.FluxHide$SuppressFuseableSubscriber.onNext(FluxHide.java:137)
	at reactor.core.publisher.MonoFlatMap$FlatMapMain.secondComplete(MonoFlatMap.java:245)
	at reactor.core.publisher.MonoFlatMap$FlatMapInner.onNext(MonoFlatMap.java:305)
	at io.opentelemetry.javaagent.shaded.instrumentation.reactor.v3_1.TracingSubscriber.onNext(TracingSubscriber.java:68)
	at reactor.core.publisher.FluxMap$MapSubscriber.onNext(FluxMap.java:122)
	at io.opentelemetry.javaagent.shaded.instrumentation.reactor.v3_1.TracingSubscriber.onNext(TracingSubscriber.java:68)
	at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onNext(FluxOnErrorResume.java:79)
	at io.opentelemetry.javaagent.shaded.instrumentation.reactor.v3_1.TracingSubscriber.onNext(TracingSubscriber.java:68)
	at reactor.core.publisher.MonoFlatMap$FlatMapMain.secondComplete(MonoFlatMap.java:245)
	at reactor.core.publisher.MonoFlatMap$FlatMapInner.onNext(MonoFlatMap.java:305)
	at io.opentelemetry.javaagent.shaded.instrumentation.reactor.v3_1.TracingSubscriber.onNext(TracingSubscriber.java:68)
	at io.opentelemetry.javaagent.shaded.instrumentation.reactor.v3_1.TracingSubscriber.onNext(TracingSubscriber.java:68)
	at reactor.core.publisher.MonoCompletionStage$MonoCompletionStageSubscription.apply(MonoCompletionStage.java:121)
	at reactor.core.publisher.MonoCompletionStage$MonoCompletionStageSubscription.apply(MonoCompletionStage.java:67)
	at java.base/java.util.concurrent.CompletableFuture.uniHandle(CompletableFuture.java:934)
	at java.base/java.util.concurrent.CompletableFuture$UniHandle.tryFire(CompletableFuture.java:911)
	at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:510)
	at java.base/java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1773)
	at java.base/java.util.concurrent.CompletableFuture$AsyncSupply.exec(CompletableFuture.java:1760)
	at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:373)
	at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1182)
	at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1655)
	at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1622)
	at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:165)
	Suppressed: java.lang.Exception: #block terminated with an error
		at reactor.core.publisher.BlockingSingleSubscriber.blockingGet(BlockingSingleSubscriber.java:146)
		at reactor.core.publisher.Mono.block(Mono.java:1807)
		at com.azure.messaging.servicebus.ServiceBusSenderClient.sendMessage(ServiceBusSenderClient.java:266)

or

java.lang.IllegalStateException: Timeout on blocking read for 245600000000 NANOSECONDS
	at reactor.core.publisher.BlockingSingleSubscriber.blockingGet(BlockingSingleSubscriber.java:129)
	at reactor.core.publisher.Mono.block(Mono.java:1807)
	at com.azure.messaging.servicebus.ServiceBusSenderClient.sendMessage(ServiceBusSenderClient.java:266)

Code Snippet

public AbstractBusEventProducer(ServiceBusConfiguration.ServiceBusProperties properties, TokenCredential tokenCredential) {
    this.queueName = writerProperties.queueName();
    this.client = new ServiceBusClientBuilder()
            .fullyQualifiedNamespace(properties.fullyQualifiedNamespace())
            .credential(tokenCredential)
            .sender()
            .queueName(writerProperties.queueName())
            .buildClient();
}

// This is the method we use to send messages
public void sendMessage(T message) {
    try {
        client.sendMessage(new ServiceBusMessage(mapper.writeValueAsString(message)));
    } catch (JsonProcessingException e) {
        throw new RuntimeException(e);
    }
}

Expected behavior
I would expect the message to be sent, or at least retried in case of failure.

Setup (please complete the following information):

  • Library/Libraries: com.azure:azure-messaging-servicebus:7.17.7
  • Java version: 17
  • App Server/Environment: Azure App Service
  • Frameworks: Spring Boot
@github-actions github-actions bot added Client This issue points to a problem in the data-plane of the library. customer-reported Issues that are reported by GitHub users external to the Azure organization. needs-team-attention Workflow: This issue needs attention from Azure service team or SDK team question The issue doesn't require a change to the product in order to be resolved. Most issues start as that Service Bus labels Jan 22, 2025
Copy link

@anuchandy @conniey @lmolkova

Copy link

Thank you for your feedback. Tagging and routing to the team member best able to assist.

@s-vivien s-vivien changed the title [BUG] Message sending in ServiceBus queue occasionally fails with error "Cannot send a message when request response channel is disposed" [BUG] Message sending in ServiceBus queue occasionally fails with error "Cannot send a message when request response channel is disposed" or "Timeout on blocking read" Jan 22, 2025
@anuchandy
Copy link
Member

Hello @s-vivien, thanks for reaching out. Could you share the following information -

  1. Are you using single Sender client object throughout the lifetime of the application
  2. Could you share the dependencies section of the application POM file (or the complete POM file itself)
  3. In addition to 2, can you run mvn dependency:tree and share the full output.

After checking these I'll let you know if further details are needed.

@s-vivien
Copy link
Author

s-vivien commented Jan 22, 2025

Hello,

  1. I am using a single Sender client throughout the lifetime of the application
  2. This is the gradle runtime classpath of my app :
+--- fr.app:my-app-commons-azcredentials:0.16.0-SNAPSHOT
|    +--- org.springframework.boot:spring-boot-dependencies:3.3.4
|    |    +--- jakarta.xml.bind:jakarta.xml.bind-api:4.0.2 (c)
|    |    +--- io.projectreactor:reactor-core:3.6.10 (c)
|    |    +--- org.springframework.data:spring-data-redis:3.3.4 (c)
|    |    +--- org.springframework:spring-aop:6.1.13 (c)
|    |    +--- org.springframework:spring-beans:6.1.13 (c)
|    |    +--- org.springframework:spring-context:6.1.13 (c)
|    |    +--- org.springframework:spring-context-support:6.1.13 (c)
|    |    +--- org.springframework:spring-core:6.1.13 (c)
|    |    +--- org.springframework:spring-expression:6.1.13 (c)
|    |    +--- org.springframework:spring-messaging:6.1.13 (c)
|    |    +--- org.springframework:spring-tx:6.1.13 (c)
|    |    +--- org.springframework:spring-web:6.1.13 (c)
|    |    +--- org.springframework:spring-webmvc:6.1.13 (c)
|    |    +--- org.springframework.security:spring-security-config:6.3.3 (c)
|    |    +--- org.springframework.security:spring-security-core:6.3.3 (c)
|    |    +--- org.springframework.security:spring-security-oauth2-jose:6.3.3 (c)
|    |    +--- org.springframework.security:spring-security-oauth2-resource-server:6.3.3 (c)
|    |    +--- org.springframework.security:spring-security-web:6.3.3 (c)
|    |    +--- org.aspectj:aspectjweaver:1.9.22.1 (c)
|    |    +--- com.github.ben-manes.caffeine:caffeine:3.1.8 (c)
|    |    +--- org.apache.commons:commons-lang3:3.14.0 -> 3.13.0 (c)
|    |    +--- org.apache.commons:commons-pool2:2.12.0 (c)
|    |    +--- org.hibernate.validator:hibernate-validator:8.0.1.Final (c)
|    |    +--- jakarta.annotation:jakarta.annotation-api:2.1.1 (c)
|    |    +--- jakarta.validation:jakarta.validation-api:3.0.2 (c)
|    |    +--- jakarta.xml.soap:jakarta.xml.soap-api:3.0.2 (c)
|    |    +--- jakarta.xml.ws:jakarta.xml.ws-api:4.0.2 -> 3.0.1 (c)
|    |    +--- io.lettuce:lettuce-core:6.3.2.RELEASE (c)
|    |    +--- org.springframework.boot:spring-boot-autoconfigure:3.3.4 (c)
|    |    +--- org.springframework.boot:spring-boot-starter:3.3.4 (c)
|    |    +--- org.springframework.boot:spring-boot-starter-aop:3.3.4 (c)
|    |    +--- org.springframework.boot:spring-boot-starter-cache:3.3.4 (c)
|    |    +--- org.springframework.boot:spring-boot-starter-data-redis:3.3.4 (c)
|    |    +--- org.springframework.boot:spring-boot-starter-json:3.3.4 (c)
|    |    +--- org.springframework.boot:spring-boot-starter-oauth2-resource-server:3.3.4 (c)
|    |    +--- org.springframework.boot:spring-boot-starter-tomcat:3.3.4 (c)
|    |    +--- org.springframework.boot:spring-boot-starter-validation:3.3.4 (c)
|    |    +--- org.springframework.boot:spring-boot-starter-web:3.3.4 (c)
|    |    +--- org.slf4j:slf4j-api:2.0.16 (c)
|    |    +--- org.apache.tomcat.embed:tomcat-embed-core:10.1.30 (c)
|    |    +--- org.apache.tomcat.embed:tomcat-embed-el:10.1.30 (c)
|    |    +--- org.apache.tomcat.embed:tomcat-embed-websocket:10.1.30 (c)
|    |    +--- org.springframework.boot:spring-boot:3.3.4 (c)
|    |    +--- com.fasterxml.jackson.core:jackson-annotations:2.17.2 (c)
|    |    +--- com.fasterxml.jackson.core:jackson-core:2.17.2 (c)
|    |    +--- com.fasterxml.jackson.core:jackson-databind:2.17.2 (c)
|    |    +--- com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.17.2 (c)
|    |    +--- org.springframework.data:spring-data-commons:3.3.4 (c)
|    |    +--- com.fasterxml.jackson.module:jackson-module-parameter-names:2.17.2 (c)
|    |    +--- com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.17.2 (c)
|    |    +--- commons-codec:commons-codec:1.16.1 (c)
|    |    +--- org.apache.httpcomponents.client5:httpclient5:5.3.1 (c)
|    |    +--- org.apache.httpcomponents.core5:httpcore5:5.2.5 (c)
|    |    +--- org.apache.httpcomponents.core5:httpcore5-h2:5.2.5 (c)
|    |    +--- com.google.code.gson:gson:2.10.1 (c)
|    |    +--- io.reactivex.rxjava3:rxjava:3.1.9 (c)
|    |    +--- org.jetbrains.kotlinx:kotlinx-coroutines-rx3:1.8.1 (c)
|    |    +--- jakarta.activation:jakarta.activation-api:2.1.3 (c)
|    |    +--- org.springframework.boot:spring-boot-starter-logging:3.3.4 (c)
|    |    +--- org.yaml:snakeyaml:2.2 (c)
|    |    +--- io.micrometer:micrometer-observation:1.13.4 (c)
|    |    +--- org.jboss.logging:jboss-logging:3.5.3.Final (c)
|    |    +--- com.fasterxml:classmate:1.7.0 (c)
|    |    +--- org.springframework.security:spring-security-crypto:6.3.3 (c)
|    |    +--- org.springframework:spring-jcl:6.1.13 (c)
|    |    +--- org.springframework.security:spring-security-oauth2-core:6.3.3 (c)
|    |    +--- io.netty:netty-common:4.1.113.Final (c)
|    |    +--- io.netty:netty-handler:4.1.113.Final (c)
|    |    +--- io.netty:netty-transport:4.1.113.Final (c)
|    |    +--- org.springframework.data:spring-data-keyvalue:3.3.4 (c)
|    |    +--- org.springframework:spring-oxm:6.1.13 (c)
|    |    +--- org.eclipse.angus:angus-activation:2.0.2 (c)
|    |    +--- org.glassfish.jaxb:jaxb-runtime:4.0.5 (c)
|    |    +--- org.reactivestreams:reactive-streams:1.0.4 (c)
|    |    +--- net.minidev:json-smart:2.5.1 (c)
|    |    +--- io.netty:netty-handler-proxy:4.1.113.Final (c)
|    |    +--- io.netty:netty-buffer:4.1.113.Final (c)
|    |    +--- io.netty:netty-codec:4.1.113.Final (c)
|    |    +--- io.netty:netty-codec-http:4.1.113.Final (c)
|    |    +--- io.netty:netty-codec-http2:4.1.113.Final (c)
|    |    +--- io.netty:netty-transport-native-unix-common:4.1.113.Final (c)
|    |    +--- io.netty:netty-transport-native-epoll:4.1.113.Final (c)
|    |    +--- io.netty:netty-transport-native-kqueue:4.1.113.Final (c)
|    |    +--- io.netty:netty-tcnative-boringssl-static:2.0.66.Final (c)
|    |    +--- io.projectreactor.netty:reactor-netty-http:1.1.22 (c)
|    |    +--- io.micrometer:micrometer-core:1.13.4 (c)
|    |    +--- com.squareup.okhttp3:okhttp:4.12.0 (c)
|    |    +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.1 (c)
|    |    +--- org.jetbrains.kotlinx:kotlinx-coroutines-reactive:1.8.1 (c)
|    |    +--- org.jetbrains.kotlin:kotlin-stdlib:1.9.25 (c)
|    |    +--- ch.qos.logback:logback-classic:1.5.8 (c)
|    |    +--- org.apache.logging.log4j:log4j-to-slf4j:2.23.1 (c)
|    |    +--- org.slf4j:jul-to-slf4j:2.0.16 (c)
|    |    +--- io.micrometer:micrometer-commons:1.13.4 (c)
|    |    +--- io.netty:netty-resolver:4.1.113.Final (c)
|    |    +--- org.eclipse.angus:angus-mail:2.0.3 (c)
|    |    +--- org.glassfish.jaxb:jaxb-core:4.0.5 (c)
|    |    +--- io.netty:netty-codec-socks:4.1.113.Final (c)
|    |    +--- io.netty:netty-transport-classes-epoll:4.1.113.Final (c)
|    |    +--- io.netty:netty-transport-classes-kqueue:4.1.113.Final (c)
|    |    +--- io.netty:netty-tcnative-classes:2.0.66.Final (c)
|    |    +--- io.netty:netty-resolver-dns:4.1.113.Final (c)
|    |    +--- io.netty:netty-resolver-dns-native-macos:4.1.113.Final (c)
|    |    +--- io.projectreactor.netty:reactor-netty-core:1.1.22 (c)
|    |    +--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.25 (c)
|    |    +--- org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.8.1 (c)
|    |    +--- ch.qos.logback:logback-core:1.5.8 (c)
|    |    +--- org.apache.logging.log4j:log4j-api:2.23.1 (c)
|    |    +--- wsdl4j:wsdl4j:1.6.3 (c)
|    |    +--- jakarta.mail:jakarta.mail-api:2.1.3 (c)
|    |    +--- org.glassfish.jaxb:txw2:4.0.5 (c)
|    |    +--- com.sun.istack:istack-commons-runtime:4.1.2 (c)
|    |    +--- com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.17.2 (c)
|    |    +--- io.netty:netty-codec-dns:4.1.113.Final (c)
|    |    +--- io.netty:netty-resolver-dns-classes-macos:4.1.113.Final (c)
|    |    +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.9.25 (c)
|    |    \--- org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.9.25 (c)
|    +--- com.azure.spring:spring-cloud-azure-dependencies:5.19.0
|    |    +--- com.azure:azure-identity:1.14.2 (c)
|    |    +--- com.azure:azure-security-keyvault-keys:4.9.1 (c)
|    |    +--- com.azure:azure-storage-blob:12.29.0 (c)
|    |    +--- com.azure.spring:spring-cloud-azure-starter-keyvault:5.19.0 (c)
|    |    +--- com.azure:azure-core:1.54.1 (c)
|    |    +--- com.azure:azure-spring-data-cosmos:5.19.0 (c)
|    |    +--- com.azure:azure-messaging-servicebus:7.17.7 (c)
|    |    +--- com.azure:azure-core-http-netty:1.15.7 (c)
|    |    +--- com.azure:azure-json:1.3.0 (c)
|    |    +--- com.azure:azure-xml:1.1.0 (c)
|    |    +--- com.azure:azure-storage-common:12.28.0 (c)
|    |    +--- com.azure:azure-storage-internal-avro:12.14.0 (c)
|    |    +--- com.azure.spring:spring-cloud-azure-starter-keyvault-secrets:5.19.0 (c)
|    |    +--- com.azure.spring:spring-cloud-azure-starter-keyvault-certificates:5.19.0 (c)
|    |    +--- com.azure:azure-cosmos:4.65.0 (c)
|    |    +--- com.azure:azure-core-amqp:2.9.12 (c)
|    |    +--- com.azure.spring:spring-cloud-azure-starter:5.19.0 (c)
|    |    +--- com.azure:azure-security-keyvault-secrets:4.9.1 (c)
|    |    +--- com.azure:azure-security-keyvault-certificates:4.7.1 (c)
|    |    +--- com.azure.spring:spring-cloud-azure-autoconfigure:5.19.0 (c)
|    |    +--- com.azure.spring:spring-cloud-azure-service:5.19.0 (c)
|    |    +--- com.azure.spring:spring-cloud-azure-core:5.19.0 (c)
|    |    \--- com.azure:azure-core-management:1.15.6 (c)
|    +--- org.springframework.boot:spring-boot-autoconfigure -> 3.3.4
|    |    \--- org.springframework.boot:spring-boot:3.3.4
|    |         +--- org.springframework:spring-core:6.1.13
|    |         |    +--- org.springframework:spring-jcl:6.1.13
|    |         |    \--- io.sentry:sentry-spring-jakarta:7.15.0
|    |         |         \--- io.sentry:sentry:7.15.0
|    |         +--- org.springframework:spring-context:6.1.13
|    |         |    +--- org.springframework:spring-aop:6.1.13
|    |         |    |    +--- org.springframework:spring-beans:6.1.13
|    |         |    |    |    \--- org.springframework:spring-core:6.1.13 (*)
|    |         |    |    \--- org.springframework:spring-core:6.1.13 (*)
|    |         |    +--- org.springframework:spring-beans:6.1.13 (*)
|    |         |    +--- org.springframework:spring-core:6.1.13 (*)
|    |         |    +--- org.springframework:spring-expression:6.1.13
|    |         |    |    \--- org.springframework:spring-core:6.1.13 (*)
|    |         |    \--- io.micrometer:micrometer-observation:1.12.10 -> 1.13.4
|    |         |         \--- io.micrometer:micrometer-commons:1.13.4
|    |         \--- io.sentry:sentry-spring-boot-jakarta:7.15.0
|    |              +--- io.sentry:sentry:7.15.0
|    |              \--- io.sentry:sentry-spring-jakarta:7.15.0 (*)
|    +--- jakarta.annotation:jakarta.annotation-api -> 2.1.1
|    +--- com.azure:azure-core -> 1.54.1
|    |    +--- com.azure:azure-json:1.3.0
|    |    +--- com.azure:azure-xml:1.1.0
|    |    +--- com.fasterxml.jackson.core:jackson-annotations:2.17.2
|    |    |    \--- com.fasterxml.jackson:jackson-bom:2.17.2
|    |    |         +--- com.fasterxml.jackson.core:jackson-annotations:2.17.2 (c)
|    |    |         +--- com.fasterxml.jackson.core:jackson-core:2.17.2 (c)
|    |    |         +--- com.fasterxml.jackson.core:jackson-databind:2.17.2 (c)
|    |    |         +--- com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.17.2 (c)
|    |    |         +--- com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.17.2 (c)
|    |    |         +--- com.fasterxml.jackson.module:jackson-module-parameter-names:2.17.2 (c)
|    |    |         \--- com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.17.2 (c)
|    |    +--- com.fasterxml.jackson.core:jackson-core:2.17.2
|    |    |    \--- com.fasterxml.jackson:jackson-bom:2.17.2 (*)
|    |    +--- com.fasterxml.jackson.core:jackson-databind:2.17.2
|    |    |    +--- com.fasterxml.jackson.core:jackson-annotations:2.17.2 (*)
|    |    |    +--- com.fasterxml.jackson.core:jackson-core:2.17.2 (*)
|    |    |    \--- com.fasterxml.jackson:jackson-bom:2.17.2 (*)
|    |    +--- com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.17.2
|    |    |    +--- com.fasterxml.jackson.core:jackson-annotations:2.17.2 (*)
|    |    |    +--- com.fasterxml.jackson.core:jackson-core:2.17.2 (*)
|    |    |    +--- com.fasterxml.jackson.core:jackson-databind:2.17.2 (*)
|    |    |    \--- com.fasterxml.jackson:jackson-bom:2.17.2 (*)
|    |    +--- org.slf4j:slf4j-api:1.7.36 -> 2.0.16
|    |    \--- io.projectreactor:reactor-core:3.4.41 -> 3.6.10
|    |         \--- org.reactivestreams:reactive-streams:1.0.4
|    \--- com.azure:azure-identity -> 1.14.2
|         +--- com.azure:azure-core:1.54.1 (*)
|         +--- com.azure:azure-core-http-netty:1.15.7
|         |    +--- com.azure:azure-core:1.54.1 (*)
|         |    +--- io.netty:netty-handler:4.1.115.Final -> 4.1.113.Final
|         |    |    +--- io.netty:netty-common:4.1.113.Final
|         |    |    +--- io.netty:netty-resolver:4.1.113.Final
|         |    |    |    \--- io.netty:netty-common:4.1.113.Final
|         |    |    +--- io.netty:netty-buffer:4.1.113.Final
|         |    |    |    \--- io.netty:netty-common:4.1.113.Final
|         |    |    +--- io.netty:netty-transport:4.1.113.Final
|         |    |    |    +--- io.netty:netty-common:4.1.113.Final
|         |    |    |    +--- io.netty:netty-buffer:4.1.113.Final (*)
|         |    |    |    \--- io.netty:netty-resolver:4.1.113.Final (*)
|         |    |    +--- io.netty:netty-transport-native-unix-common:4.1.113.Final
|         |    |    |    +--- io.netty:netty-common:4.1.113.Final
|         |    |    |    +--- io.netty:netty-buffer:4.1.113.Final (*)
|         |    |    |    \--- io.netty:netty-transport:4.1.113.Final (*)
|         |    |    \--- io.netty:netty-codec:4.1.113.Final
|         |    |         +--- io.netty:netty-common:4.1.113.Final
|         |    |         +--- io.netty:netty-buffer:4.1.113.Final (*)
|         |    |         \--- io.netty:netty-transport:4.1.113.Final (*)
|         |    +--- io.netty:netty-handler-proxy:4.1.115.Final -> 4.1.113.Final
|         |    |    +--- io.netty:netty-common:4.1.113.Final
|         |    |    +--- io.netty:netty-buffer:4.1.113.Final (*)
|         |    |    +--- io.netty:netty-transport:4.1.113.Final (*)
|         |    |    +--- io.netty:netty-codec:4.1.113.Final (*)
|         |    |    +--- io.netty:netty-codec-socks:4.1.113.Final
|         |    |    |    +--- io.netty:netty-common:4.1.113.Final
|         |    |    |    +--- io.netty:netty-buffer:4.1.113.Final (*)
|         |    |    |    +--- io.netty:netty-transport:4.1.113.Final (*)
|         |    |    |    \--- io.netty:netty-codec:4.1.113.Final (*)
|         |    |    \--- io.netty:netty-codec-http:4.1.113.Final
|         |    |         +--- io.netty:netty-common:4.1.113.Final
|         |    |         +--- io.netty:netty-buffer:4.1.113.Final (*)
|         |    |         +--- io.netty:netty-transport:4.1.113.Final (*)
|         |    |         +--- io.netty:netty-codec:4.1.113.Final (*)
|         |    |         \--- io.netty:netty-handler:4.1.113.Final (*)
|         |    +--- io.netty:netty-buffer:4.1.115.Final -> 4.1.113.Final (*)
|         |    +--- io.netty:netty-codec:4.1.115.Final -> 4.1.113.Final (*)
|         |    +--- io.netty:netty-codec-http:4.1.115.Final -> 4.1.113.Final (*)
|         |    +--- io.netty:netty-codec-http2:4.1.115.Final -> 4.1.113.Final
|         |    |    +--- io.netty:netty-common:4.1.113.Final
|         |    |    +--- io.netty:netty-buffer:4.1.113.Final (*)
|         |    |    +--- io.netty:netty-transport:4.1.113.Final (*)
|         |    |    +--- io.netty:netty-codec:4.1.113.Final (*)
|         |    |    +--- io.netty:netty-handler:4.1.113.Final (*)
|         |    |    \--- io.netty:netty-codec-http:4.1.113.Final (*)
|         |    +--- io.netty:netty-transport-native-unix-common:4.1.115.Final -> 4.1.113.Final (*)
|         |    +--- io.netty:netty-transport-native-epoll:4.1.115.Final -> 4.1.113.Final
|         |    |    +--- io.netty:netty-common:4.1.113.Final
|         |    |    +--- io.netty:netty-buffer:4.1.113.Final (*)
|         |    |    +--- io.netty:netty-transport:4.1.113.Final (*)
|         |    |    +--- io.netty:netty-transport-native-unix-common:4.1.113.Final (*)
|         |    |    \--- io.netty:netty-transport-classes-epoll:4.1.113.Final
|         |    |         +--- io.netty:netty-common:4.1.113.Final
|         |    |         +--- io.netty:netty-buffer:4.1.113.Final (*)
|         |    |         +--- io.netty:netty-transport:4.1.113.Final (*)
|         |    |         \--- io.netty:netty-transport-native-unix-common:4.1.113.Final (*)
|         |    +--- io.netty:netty-transport-native-kqueue:4.1.115.Final -> 4.1.113.Final
|         |    |    +--- io.netty:netty-common:4.1.113.Final
|         |    |    +--- io.netty:netty-buffer:4.1.113.Final (*)
|         |    |    +--- io.netty:netty-transport:4.1.113.Final (*)
|         |    |    +--- io.netty:netty-transport-native-unix-common:4.1.113.Final (*)
|         |    |    \--- io.netty:netty-transport-classes-kqueue:4.1.113.Final
|         |    |         +--- io.netty:netty-common:4.1.113.Final
|         |    |         +--- io.netty:netty-buffer:4.1.113.Final (*)
|         |    |         +--- io.netty:netty-transport:4.1.113.Final (*)
|         |    |         \--- io.netty:netty-transport-native-unix-common:4.1.113.Final (*)
|         |    +--- io.netty:netty-tcnative-boringssl-static:2.0.69.Final -> 2.0.66.Final
|         |    |    \--- io.netty:netty-tcnative-classes:2.0.66.Final
|         |    +--- io.projectreactor.netty:reactor-netty-http:1.0.48 -> 1.1.22
|         |    |    +--- io.netty:netty-codec-http:4.1.112.Final -> 4.1.113.Final (*)
|         |    |    +--- io.netty:netty-codec-http2:4.1.112.Final -> 4.1.113.Final (*)
|         |    |    +--- io.netty:netty-resolver-dns:4.1.112.Final -> 4.1.113.Final
|         |    |    |    +--- io.netty:netty-common:4.1.113.Final
|         |    |    |    +--- io.netty:netty-buffer:4.1.113.Final (*)
|         |    |    |    +--- io.netty:netty-resolver:4.1.113.Final (*)
|         |    |    |    +--- io.netty:netty-transport:4.1.113.Final (*)
|         |    |    |    +--- io.netty:netty-codec:4.1.113.Final (*)
|         |    |    |    +--- io.netty:netty-codec-dns:4.1.113.Final
|         |    |    |    |    +--- io.netty:netty-common:4.1.113.Final
|         |    |    |    |    +--- io.netty:netty-buffer:4.1.113.Final (*)
|         |    |    |    |    +--- io.netty:netty-transport:4.1.113.Final (*)
|         |    |    |    |    \--- io.netty:netty-codec:4.1.113.Final (*)
|         |    |    |    \--- io.netty:netty-handler:4.1.113.Final (*)
|         |    |    +--- io.netty:netty-resolver-dns-native-macos:4.1.112.Final -> 4.1.113.Final
|         |    |    |    \--- io.netty:netty-resolver-dns-classes-macos:4.1.113.Final
|         |    |    |         +--- io.netty:netty-common:4.1.113.Final
|         |    |    |         +--- io.netty:netty-resolver-dns:4.1.113.Final (*)
|         |    |    |         \--- io.netty:netty-transport-native-unix-common:4.1.113.Final (*)
|         |    |    +--- io.netty:netty-transport-native-epoll:4.1.112.Final -> 4.1.113.Final (*)
|         |    |    +--- io.projectreactor.netty:reactor-netty-core:1.1.22
|         |    |    |    +--- io.netty:netty-handler:4.1.112.Final -> 4.1.113.Final (*)
|         |    |    |    +--- io.netty:netty-handler-proxy:4.1.112.Final -> 4.1.113.Final (*)
|         |    |    |    +--- io.netty:netty-resolver-dns:4.1.112.Final -> 4.1.113.Final (*)
|         |    |    |    +--- io.netty:netty-resolver-dns-native-macos:4.1.112.Final -> 4.1.113.Final (*)
|         |    |    |    +--- io.netty:netty-transport-native-epoll:4.1.112.Final -> 4.1.113.Final (*)
|         |    |    |    \--- io.projectreactor:reactor-core:3.5.20 -> 3.6.10 (*)
|         |    |    \--- io.projectreactor:reactor-core:3.5.20 -> 3.6.10 (*)
|         |    \--- io.netty:netty-common:4.1.115.Final -> 4.1.113.Final
|         +--- com.azure:azure-json:1.3.0
|         +--- com.microsoft.azure:msal4j:1.17.2
|         |    +--- com.nimbusds:oauth2-oidc-sdk:11.18
|         |    |    +--- com.github.stephenc.jcip:jcip-annotations:1.0-1
|         |    |    +--- com.nimbusds:content-type:2.3
|         |    |    +--- net.minidev:json-smart:2.5.1
|         |    |    |    \--- net.minidev:accessors-smart:2.5.1
|         |    |    |         \--- org.ow2.asm:asm:9.6
|         |    |    +--- com.nimbusds:lang-tag:1.7
|         |    |    \--- com.nimbusds:nimbus-jose-jwt:9.40
|         |    +--- net.minidev:json-smart:2.5.0 -> 2.5.1 (*)
|         |    +--- org.slf4j:slf4j-api:1.7.36 -> 2.0.16
|         |    \--- com.fasterxml.jackson.core:jackson-databind:2.13.4.2 -> 2.17.2 (*)
|         +--- com.microsoft.azure:msal4j-persistence-extension:1.3.0
|         |    +--- com.microsoft.azure:msal4j:1.15.0 -> 1.17.2 (*)
|         |    +--- net.java.dev.jna:jna:5.13.0
|         |    +--- net.java.dev.jna:jna-platform:5.13.0
|         |    |    \--- net.java.dev.jna:jna:5.13.0
|         |    \--- org.slf4j:slf4j-api:1.7.7 -> 2.0.16
|         \--- net.java.dev.jna:jna-platform:5.13.0 (*)
+--- fr.app:my-app-commons-cosmosdb:0.16.0-SNAPSHOT
|    +--- org.springframework.boot:spring-boot-dependencies:3.3.4 (*)
|    +--- com.azure.spring:spring-cloud-azure-dependencies:5.19.0 (*)
|    +--- org.springframework.boot:spring-boot-autoconfigure -> 3.3.4 (*)
|    +--- jakarta.annotation:jakarta.annotation-api -> 2.1.1
|    +--- com.azure:azure-spring-data-cosmos -> 5.19.0
|    |    +--- org.springframework:spring-core:6.2.0 -> 6.1.13 (*)
|    |    +--- org.springframework:spring-web:6.2.0 -> 6.1.13
|    |    |    +--- org.springframework:spring-beans:6.1.13 (*)
|    |    |    +--- org.springframework:spring-core:6.1.13 (*)
|    |    |    \--- io.micrometer:micrometer-observation:1.12.10 -> 1.13.4 (*)
|    |    +--- org.springframework:spring-beans:6.2.0 -> 6.1.13 (*)
|    |    +--- org.springframework:spring-context:6.2.0 -> 6.1.13 (*)
|    |    +--- org.springframework:spring-tx:6.2.0 -> 6.1.13
|    |    |    +--- org.springframework:spring-beans:6.1.13 (*)
|    |    |    \--- org.springframework:spring-core:6.1.13 (*)
|    |    +--- org.springframework.data:spring-data-commons:3.4.0 -> 3.3.4
|    |    |    +--- org.springframework:spring-core:6.1.13 (*)
|    |    |    +--- org.springframework:spring-beans:6.1.13 (*)
|    |    |    \--- org.slf4j:slf4j-api:2.0.2 -> 2.0.16
|    |    +--- org.springframework:spring-expression:6.2.0 -> 6.1.13 (*)
|    |    +--- com.azure:azure-cosmos:4.65.0
|    |    |    +--- com.azure:azure-core:1.54.1 (*)
|    |    |    +--- com.azure:azure-core-http-netty:1.15.7 (*)
|    |    |    +--- org.slf4j:slf4j-api:1.7.36 -> 2.0.16
|    |    |    +--- org.hdrhistogram:HdrHistogram:2.1.12 -> 2.2.2
|    |    |    +--- io.dropwizard.metrics:metrics-core:4.1.0
|    |    |    |    \--- org.slf4j:slf4j-api:1.7.26 -> 2.0.16
|    |    |    \--- io.micrometer:micrometer-core:1.9.17 -> 1.13.4
|    |    |         +--- io.micrometer:micrometer-commons:1.13.4
|    |    |         +--- io.micrometer:micrometer-observation:1.13.4 (*)
|    |    |         +--- org.hdrhistogram:HdrHistogram:2.2.2
|    |    |         \--- org.latencyutils:LatencyUtils:2.0.3
|    |    +--- com.fasterxml.jackson.module:jackson-module-parameter-names:2.18.1 -> 2.17.2
|    |    |    +--- com.fasterxml.jackson.core:jackson-core:2.17.2 (*)
|    |    |    +--- com.fasterxml.jackson.core:jackson-databind:2.17.2 (*)
|    |    |    \--- com.fasterxml.jackson:jackson-bom:2.17.2 (*)
|    |    +--- com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.18.1 -> 2.17.2
|    |    |    +--- com.fasterxml.jackson.core:jackson-core:2.17.2 (*)
|    |    |    +--- com.fasterxml.jackson.core:jackson-databind:2.17.2 (*)
|    |    |    \--- com.fasterxml.jackson:jackson-bom:2.17.2 (*)
|    |    +--- com.fasterxml.jackson.core:jackson-annotations:2.18.1 -> 2.17.2 (*)
|    |    +--- org.javatuples:javatuples:1.2
|    |    +--- javax.annotation:javax.annotation-api:1.3.2
|    |    +--- org.apache.commons:commons-lang3:3.17.0 -> 3.13.0
|    |    \--- org.slf4j:slf4j-api:2.0.16
|    \--- com.azure.spring:spring-cloud-azure-starter-keyvault -> 5.19.0
|         +--- com.azure.spring:spring-cloud-azure-starter-keyvault-secrets:5.19.0
|         |    +--- com.azure.spring:spring-cloud-azure-starter:5.19.0
|         |    |    +--- org.springframework.boot:spring-boot-starter:3.4.0 -> 3.3.4
|         |    |    |    +--- org.springframework.boot:spring-boot:3.3.4 (*)
|         |    |    |    +--- org.springframework.boot:spring-boot-autoconfigure:3.3.4 (*)
|         |    |    |    +--- org.springframework.boot:spring-boot-starter-logging:3.3.4
|         |    |    |    |    +--- ch.qos.logback:logback-classic:1.5.8
|         |    |    |    |    |    +--- ch.qos.logback:logback-core:1.5.8
|         |    |    |    |    |    +--- org.slf4j:slf4j-api:2.0.15 -> 2.0.16
|         |    |    |    |    |    \--- io.sentry:sentry-logback:7.15.0
|         |    |    |    |    |         \--- io.sentry:sentry:7.15.0
|         |    |    |    |    +--- org.apache.logging.log4j:log4j-to-slf4j:2.23.1
|         |    |    |    |    |    +--- org.apache.logging.log4j:log4j-api:2.23.1
|         |    |    |    |    |    |    \--- io.sentry:sentry-log4j2:7.15.0
|         |    |    |    |    |    |         \--- io.sentry:sentry:7.15.0
|         |    |    |    |    |    \--- org.slf4j:slf4j-api:2.0.9 -> 2.0.16
|         |    |    |    |    \--- org.slf4j:jul-to-slf4j:2.0.16
|         |    |    |    |         \--- org.slf4j:slf4j-api:2.0.16
|         |    |    |    +--- jakarta.annotation:jakarta.annotation-api:2.1.1
|         |    |    |    +--- org.springframework:spring-core:6.1.13 (*)
|         |    |    |    \--- org.yaml:snakeyaml:2.2
|         |    |    \--- com.azure.spring:spring-cloud-azure-autoconfigure:5.19.0
|         |    |         +--- com.azure.spring:spring-cloud-azure-service:5.19.0
|         |    |         |    \--- com.azure.spring:spring-cloud-azure-core:5.19.0
|         |    |         |         +--- org.springframework:spring-context:6.2.0 -> 6.1.13 (*)
|         |    |         |         +--- com.azure:azure-core:1.54.1 (*)
|         |    |         |         +--- com.azure:azure-identity:1.14.2 (*)
|         |    |         |         +--- com.azure:azure-core-amqp:2.9.12
|         |    |         |         |    +--- com.azure:azure-core:1.54.1 (*)
|         |    |         |         |    +--- com.microsoft.azure:qpid-proton-j-extensions:1.2.5
|         |    |         |         |    |    +--- org.apache.qpid:proton-j:0.34.1
|         |    |         |         |    |    \--- org.slf4j:slf4j-api:1.7.28 -> 2.0.16
|         |    |         |         |    \--- org.apache.qpid:proton-j:0.34.1
|         |    |         |         \--- com.azure:azure-core-management:1.15.6
|         |    |         |              +--- com.azure:azure-core:1.54.1 (*)
|         |    |         |              \--- com.azure:azure-json:1.3.0
|         |    |         +--- org.springframework.boot:spring-boot-autoconfigure:3.4.0 -> 3.3.4 (*)
|         |    |         \--- jakarta.validation:jakarta.validation-api:3.0.2
|         |    \--- com.azure:azure-security-keyvault-secrets:4.9.1
|         |         +--- com.azure:azure-core:1.54.1 (*)
|         |         +--- com.azure:azure-json:1.3.0
|         |         \--- com.azure:azure-core-http-netty:1.15.7 (*)
|         \--- com.azure.spring:spring-cloud-azure-starter-keyvault-certificates:5.19.0
|              +--- com.azure.spring:spring-cloud-azure-starter:5.19.0 (*)
|              \--- com.azure:azure-security-keyvault-certificates:4.7.1
|                   +--- com.azure:azure-core:1.54.1 (*)
|                   +--- com.azure:azure-json:1.3.0
|                   \--- com.azure:azure-core-http-netty:1.15.7 (*)
+--- fr.app:my-app-commons-notification-hub:0.16.0-SNAPSHOT
|    +--- org.springframework.boot:spring-boot-dependencies:3.3.4 (*)
|    +--- com.azure.spring:spring-cloud-azure-dependencies:5.19.0 (*)
|    +--- org.springframework.boot:spring-boot-autoconfigure -> 3.3.4 (*)
|    +--- jakarta.annotation:jakarta.annotation-api -> 2.1.1
|    +--- com.windowsazure:Notification-Hubs-java-sdk:1.1.0
|    |    +--- commons-codec:commons-codec:1.15 -> 1.16.1
|    |    +--- org.apache.commons:commons-digester3:3.2
|    |    |    \--- cglib:cglib:2.2.2
|    |    |         \--- asm:asm:3.3.1
|    |    +--- commons-beanutils:commons-beanutils:1.9.4
|    |    |    +--- commons-logging:commons-logging:1.2 -> 1.3.2
|    |    |    \--- commons-collections:commons-collections:3.2.2
|    |    +--- org.apache.httpcomponents.client5:httpclient5:5.2 -> 5.3.1
|    |    +--- org.apache.httpcomponents.core5:httpcore5:5.2 -> 5.2.5
|    |    +--- org.apache.httpcomponents.core5:httpcore5-h2:5.2 -> 5.2.5
|    |    |    \--- org.apache.httpcomponents.core5:httpcore5:5.2.5
|    |    +--- org.slf4j:slf4j-api:1.7.36 -> 2.0.16
|    |    +--- commons-io:commons-io:2.11.0
|    |    +--- com.google.code.gson:gson:2.9.0 -> 2.10.1
|    |    \--- javax.xml.bind:jaxb-api:2.3.1
|    |         \--- javax.activation:javax.activation-api:1.2.0
|    \--- com.azure.spring:spring-cloud-azure-starter-keyvault -> 5.19.0 (*)
+--- fr.app:my-app-commons-service-bus:0.16.0-SNAPSHOT
|    +--- org.springframework.boot:spring-boot-dependencies:3.3.4 (*)
|    +--- com.azure.spring:spring-cloud-azure-dependencies:5.19.0 (*)
|    +--- org.springframework.boot:spring-boot-autoconfigure -> 3.3.4 (*)
|    +--- jakarta.annotation:jakarta.annotation-api -> 2.1.1
|    \--- com.azure:azure-messaging-servicebus:7.17.6 -> 7.17.7
|         +--- com.azure:azure-core:1.54.1 (*)
|         +--- com.azure:azure-xml:1.1.0
|         +--- com.azure:azure-core-amqp:2.9.12 (*)
|         \--- com.azure:azure-core-http-netty:1.15.7 (*)
+--- fr.app:my-app-commons-on-demand-p:0.16.0-SNAPSHOT
|    +--- org.springframework.boot:spring-boot-dependencies:3.3.4 (*)
|    +--- com.azure.spring:spring-cloud-azure-dependencies:5.19.0 (*)
|    +--- org.springframework.boot:spring-boot-autoconfigure -> 3.3.4 (*)
|    +--- jakarta.annotation:jakarta.annotation-api -> 2.1.1
|    +--- org.springframework.boot:spring-boot-starter-oauth2-resource-server -> 3.3.4
|    |    +--- org.springframework.boot:spring-boot-starter:3.3.4 (*)
|    |    +--- org.springframework.security:spring-security-config:6.3.3
|    |    |    +--- org.springframework.security:spring-security-core:6.3.3
|    |    |    |    +--- org.springframework.security:spring-security-crypto:6.3.3
|    |    |    |    +--- org.springframework:spring-aop:6.1.12 -> 6.1.13 (*)
|    |    |    |    +--- org.springframework:spring-beans:6.1.12 -> 6.1.13 (*)
|    |    |    |    +--- org.springframework:spring-context:6.1.12 -> 6.1.13 (*)
|    |    |    |    +--- org.springframework:spring-core:6.1.12 -> 6.1.13 (*)
|    |    |    |    +--- org.springframework:spring-expression:6.1.12 -> 6.1.13 (*)
|    |    |    |    \--- io.micrometer:micrometer-observation:1.12.9 -> 1.13.4 (*)
|    |    |    +--- org.springframework:spring-aop:6.1.12 -> 6.1.13 (*)
|    |    |    +--- org.springframework:spring-beans:6.1.12 -> 6.1.13 (*)
|    |    |    +--- org.springframework:spring-context:6.1.12 -> 6.1.13 (*)
|    |    |    \--- org.springframework:spring-core:6.1.12 -> 6.1.13 (*)
|    |    +--- org.springframework.security:spring-security-core:6.3.3 (*)
|    |    +--- org.springframework.security:spring-security-oauth2-resource-server:6.3.3
|    |    |    +--- org.springframework.security:spring-security-core:6.3.3 (*)
|    |    |    +--- org.springframework.security:spring-security-oauth2-core:6.3.3
|    |    |    |    +--- org.springframework.security:spring-security-core:6.3.3 (*)
|    |    |    |    +--- org.springframework:spring-core:6.1.12 -> 6.1.13 (*)
|    |    |    |    \--- org.springframework:spring-web:6.1.12 -> 6.1.13 (*)
|    |    |    +--- org.springframework.security:spring-security-web:6.3.3
|    |    |    |    +--- org.springframework.security:spring-security-core:6.3.3 (*)
|    |    |    |    +--- org.springframework:spring-core:6.1.12 -> 6.1.13 (*)
|    |    |    |    +--- org.springframework:spring-aop:6.1.12 -> 6.1.13 (*)
|    |    |    |    +--- org.springframework:spring-beans:6.1.12 -> 6.1.13 (*)
|    |    |    |    +--- org.springframework:spring-context:6.1.12 -> 6.1.13 (*)
|    |    |    |    +--- org.springframework:spring-expression:6.1.12 -> 6.1.13 (*)
|    |    |    |    \--- org.springframework:spring-web:6.1.12 -> 6.1.13 (*)
|    |    |    \--- org.springframework:spring-core:6.1.12 -> 6.1.13 (*)
|    |    \--- org.springframework.security:spring-security-oauth2-jose:6.3.3
|    |         +--- org.springframework.security:spring-security-core:6.3.3 (*)
|    |         +--- org.springframework.security:spring-security-oauth2-core:6.3.3 (*)
|    |         +--- org.springframework:spring-core:6.1.12 -> 6.1.13 (*)
|    |         \--- com.nimbusds:nimbus-jose-jwt:9.37.3 -> 9.40
|    +--- org.springframework.boot:spring-boot-starter-web -> 3.3.4
|    |    +--- org.springframework.boot:spring-boot-starter:3.3.4 (*)
|    |    +--- org.springframework.boot:spring-boot-starter-json:3.3.4
|    |    |    +--- org.springframework.boot:spring-boot-starter:3.3.4 (*)
|    |    |    +--- org.springframework:spring-web:6.1.13 (*)
|    |    |    +--- com.fasterxml.jackson.core:jackson-databind:2.17.2 (*)
|    |    |    +--- com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.17.2 (*)
|    |    |    +--- com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.17.2 (*)
|    |    |    \--- com.fasterxml.jackson.module:jackson-module-parameter-names:2.17.2 (*)
|    |    +--- org.springframework.boot:spring-boot-starter-tomcat:3.3.4
|    |    |    +--- jakarta.annotation:jakarta.annotation-api:2.1.1
|    |    |    +--- org.apache.tomcat.embed:tomcat-embed-core:10.1.30
|    |    |    +--- org.apache.tomcat.embed:tomcat-embed-el:10.1.30
|    |    |    \--- org.apache.tomcat.embed:tomcat-embed-websocket:10.1.30
|    |    |         \--- org.apache.tomcat.embed:tomcat-embed-core:10.1.30
|    |    +--- org.springframework:spring-web:6.1.13 (*)
|    |    \--- org.springframework:spring-webmvc:6.1.13
|    |         +--- org.springframework:spring-aop:6.1.13 (*)
|    |         +--- org.springframework:spring-beans:6.1.13 (*)
|    |         +--- org.springframework:spring-context:6.1.13 (*)
|    |         +--- org.springframework:spring-core:6.1.13 (*)
|    |         +--- org.springframework:spring-expression:6.1.13 (*)
|    |         \--- org.springframework:spring-web:6.1.13 (*)
|    \--- fr.app:my-app-commons-cosmosdb:0.16.0-SNAPSHOT (*)
+--- fr.app:my-app-commons-bird:0.16.0-SNAPSHOT
|    +--- org.springframework.boot:spring-boot-dependencies:3.3.4 (*)
|    +--- com.azure.spring:spring-cloud-azure-dependencies:5.19.0 (*)
|    +--- org.springframework.boot:spring-boot-autoconfigure -> 3.3.4 (*)
|    +--- jakarta.annotation:jakarta.annotation-api -> 2.1.1
|    +--- org.springframework.boot:spring-boot-starter-oauth2-resource-server -> 3.3.4 (*)
|    +--- org.springframework.boot:spring-boot-starter-web -> 3.3.4 (*)
|    +--- com.apollographql.apollo3:apollo-runtime:3.8.2
|    |    \--- com.apollographql.apollo3:apollo-runtime-jvm:3.8.2
|    |         +--- com.squareup.okhttp3:okhttp:4.9.3 -> 4.12.0
|    |         |    +--- com.squareup.okio:okio:3.6.0
|    |         |    |    \--- com.squareup.okio:okio-jvm:3.6.0
|    |         |    |         +--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.10 -> 1.9.25
|    |         |    |         |    +--- org.jetbrains.kotlin:kotlin-stdlib:1.9.25
|    |         |    |         |    |    +--- org.jetbrains:annotations:13.0 -> 23.0.0
|    |         |    |         |    |    +--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.0 -> 1.9.25 (c)
|    |         |    |         |    |    +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.9.25 (c)
|    |         |    |         |    |    \--- org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.0 -> 1.9.25 (c)
|    |         |    |         |    \--- org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.9.25
|    |         |    |         |         \--- org.jetbrains.kotlin:kotlin-stdlib:1.9.25 (*)
|    |         |    |         \--- org.jetbrains.kotlin:kotlin-stdlib-common:1.9.10 -> 1.9.25
|    |         |    |              \--- org.jetbrains.kotlin:kotlin-stdlib:1.9.25 (*)
|    |         |    +--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.21 -> 1.9.25 (*)
|    |         |    \--- io.sentry:sentry-okhttp:7.15.0
|    |         |         +--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.0 -> 1.9.25 (*)
|    |         |         \--- io.sentry:sentry:7.15.0
|    |         +--- com.apollographql.apollo3:apollo-api:3.8.2
|    |         |    \--- com.apollographql.apollo3:apollo-api-jvm:3.8.2
|    |         |         +--- com.squareup.okio:okio:3.2.0 -> 3.6.0 (*)
|    |         |         +--- com.benasher44:uuid:0.3.1
|    |         |         |    \--- com.benasher44:uuid-jvm:0.3.1
|    |         |         |         +--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.5.30 -> 1.9.25 (*)
|    |         |         |         \--- org.jetbrains.kotlin:kotlin-stdlib-common:1.5.30 -> 1.9.25 (*)
|    |         |         \--- com.apollographql.apollo3:apollo-annotations:3.8.2
|    |         |              \--- com.apollographql.apollo3:apollo-annotations-jvm:3.8.2
|    |         |                   +--- org.jetbrains.kotlin:kotlin-stdlib:1.6.21 -> 1.9.25 (*)
|    |         |                   \--- org.jetbrains:annotations:23.0.0
|    |         +--- com.apollographql.apollo3:apollo-mpp-utils:3.8.2
|    |         |    \--- com.apollographql.apollo3:apollo-mpp-utils-jvm:3.8.2
|    |         |         \--- com.apollographql.apollo3:apollo-annotations:3.8.2 (*)
|    |         +--- com.squareup.okio:okio:3.2.0 -> 3.6.0 (*)
|    |         +--- com.benasher44:uuid:0.3.1 (*)
|    |         \--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4 -> 1.8.1
|    |              +--- org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.8.1
|    |              |    +--- org.jetbrains:annotations:23.0.0
|    |              |    +--- org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.8.1
|    |              |    |    +--- org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.8.1 (c)
|    |              |    |    +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.1 (c)
|    |              |    |    +--- org.jetbrains.kotlinx:kotlinx-coroutines-reactive:1.8.1 (c)
|    |              |    |    \--- org.jetbrains.kotlinx:kotlinx-coroutines-rx3:1.8.1 (c)
|    |              |    \--- org.jetbrains.kotlin:kotlin-stdlib:1.9.21 -> 1.9.25 (*)
|    |              \--- io.sentry:sentry-kotlin-extensions:7.15.0
|    |                   \--- io.sentry:sentry:7.15.0
|    +--- com.apollographql.apollo3:apollo-rx3-support:3.8.2
|    |    +--- com.apollographql.apollo3:apollo-api:3.8.2 (*)
|    |    +--- io.reactivex.rxjava3:rxjava:3.1.3 -> 3.1.9
|    |    |    \--- org.reactivestreams:reactive-streams:1.0.4
|    |    +--- org.jetbrains.kotlinx:kotlinx-coroutines-rx3:1.6.4 -> 1.8.1
|    |    |    +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.1 (*)
|    |    |    +--- org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.8.1 (*)
|    |    |    +--- org.jetbrains.kotlinx:kotlinx-coroutines-reactive:1.8.1
|    |    |    |    +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.1 (*)
|    |    |    |    +--- org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.8.1 (*)
|    |    |    |    +--- org.reactivestreams:reactive-streams:1.0.3 -> 1.0.4
|    |    |    |    \--- org.jetbrains.kotlin:kotlin-stdlib:1.9.21 -> 1.9.25 (*)
|    |    |    +--- io.reactivex.rxjava3:rxjava:3.0.2 -> 3.1.9 (*)
|    |    |    \--- org.jetbrains.kotlin:kotlin-stdlib:1.9.21 -> 1.9.25 (*)
|    |    +--- com.apollographql.apollo3:apollo-runtime:3.8.2 (*)
|    |    \--- com.apollographql.apollo3:apollo-normalized-cache:3.8.2
|    |         \--- com.apollographql.apollo3:apollo-normalized-cache-jvm:3.8.2
|    |              +--- com.apollographql.apollo3:apollo-runtime:3.8.2 (*)
|    |              +--- com.apollographql.apollo3:apollo-normalized-cache-api:3.8.2
|    |              |    \--- com.apollographql.apollo3:apollo-normalized-cache-api-jvm:3.8.2
|    |              |         +--- com.apollographql.apollo3:apollo-api:3.8.2 (*)
|    |              |         +--- com.apollographql.apollo3:apollo-mpp-utils:3.8.2 (*)
|    |              |         +--- com.benasher44:uuid:0.3.1 (*)
|    |              |         \--- com.squareup.okio:okio:3.2.0 -> 3.6.0 (*)
|    |              +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4 -> 1.8.1 (*)
|    |              \--- org.jetbrains.kotlinx:atomicfu:0.17.0
|    |                   \--- org.jetbrains.kotlinx:atomicfu-jvm:0.17.0
|    |                        +--- org.jetbrains.kotlin:kotlin-stdlib:1.6.0 -> 1.9.25 (*)
|    |                        \--- org.jetbrains.kotlin:kotlin-stdlib-common:1.6.0 -> 1.9.25 (*)
|    +--- org.apache.commons:commons-pool2:2.12.0
|    +--- com.github.ben-manes.caffeine:caffeine:3.1.8
|    |    +--- org.checkerframework:checker-qual:3.37.0
|    |    \--- com.google.errorprone:error_prone_annotations:2.21.1
|    +--- fr.app:my-app-commons-on-demand-p:0.16.0-SNAPSHOT (*)
|    \--- fr.app:my-app-commons-tracking:0.16.0-SNAPSHOT
|         +--- org.springframework.boot:spring-boot-dependencies:3.3.4 (*)
|         +--- com.azure.spring:spring-cloud-azure-dependencies:5.19.0 (*)
|         +--- org.springframework.boot:spring-boot-autoconfigure -> 3.3.4 (*)
|         +--- jakarta.annotation:jakarta.annotation-api -> 2.1.1
|         +--- org.apache.directory.studio:org.slf4j.api:1.7.2
|         |    \--- org.slf4j:slf4j-api:1.7.2 -> 2.0.16
|         +--- com.posthog.java:posthog:1.1.1
|         \--- org.apache.commons:commons-lang3:3.13.0
+--- fr.app:my-app-commons-tracking:0.16.0-SNAPSHOT (*)
+--- jakarta.xml.ws:jakarta.xml.ws-api:3.0.1
|    +--- jakarta.xml.bind:jakarta.xml.bind-api:3.0.1 -> 4.0.2
|    |    \--- jakarta.activation:jakarta.activation-api:2.1.3
|    +--- jakarta.xml.soap:jakarta.xml.soap-api:2.0.1 -> 3.0.2
|    |    \--- jakarta.activation:jakarta.activation-api:2.1.3
|    \--- jakarta.jws:jakarta.jws-api:3.0.0
+--- jakarta.jws:jakarta.jws-api:3.0.0
+--- jakarta.annotation:jakarta.annotation-api:2.1.1
+--- org.springframework.boot:spring-boot-starter-web -> 3.3.4 (*)
+--- org.springframework.boot:spring-boot-starter-validation -> 3.3.4
|    +--- org.springframework.boot:spring-boot-starter:3.3.4 (*)
|    +--- org.apache.tomcat.embed:tomcat-embed-el:10.1.30
|    \--- org.hibernate.validator:hibernate-validator:8.0.1.Final
|         +--- jakarta.validation:jakarta.validation-api:3.0.2
|         +--- org.jboss.logging:jboss-logging:3.4.3.Final -> 3.5.3.Final
|         \--- com.fasterxml:classmate:1.5.1 -> 1.7.0
+--- org.springframework.security:spring-security-config -> 6.3.3 (*)
+--- org.springframework.security:spring-security-web -> 6.3.3 (*)
+--- org.springframework.boot:spring-boot-starter-oauth2-resource-server -> 3.3.4 (*)
+--- org.springframework.boot:spring-boot-starter-aop -> 3.3.4
|    +--- org.springframework.boot:spring-boot-starter:3.3.4 (*)
|    +--- org.springframework:spring-aop:6.1.13 (*)
|    \--- org.aspectj:aspectjweaver:1.9.22.1
+--- org.springframework.boot:spring-boot-starter-cache -> 3.3.4
|    +--- org.springframework.boot:spring-boot-starter:3.3.4 (*)
|    \--- org.springframework:spring-context-support:6.1.13
|         +--- org.springframework:spring-beans:6.1.13 (*)
|         +--- org.springframework:spring-context:6.1.13 (*)
|         \--- org.springframework:spring-core:6.1.13 (*)
+--- org.springframework.boot:spring-boot-starter-data-redis -> 3.3.4
|    +--- org.springframework.boot:spring-boot-starter:3.3.4 (*)
|    +--- io.lettuce:lettuce-core:6.3.2.RELEASE
|    |    +--- io.netty:netty-common:4.1.107.Final -> 4.1.113.Final
|    |    +--- io.netty:netty-handler:4.1.107.Final -> 4.1.113.Final (*)
|    |    +--- io.netty:netty-transport:4.1.107.Final -> 4.1.113.Final (*)
|    |    \--- io.projectreactor:reactor-core:3.6.4 -> 3.6.10 (*)
|    \--- org.springframework.data:spring-data-redis:3.3.4
|         +--- org.springframework.data:spring-data-keyvalue:3.3.4
|         |    +--- org.springframework.data:spring-data-commons:3.3.4 (*)
|         |    +--- org.springframework:spring-context:6.1.13 (*)
|         |    +--- org.springframework:spring-tx:6.1.13 (*)
|         |    \--- org.slf4j:slf4j-api:2.0.2 -> 2.0.16
|         +--- org.springframework:spring-tx:6.1.13 (*)
|         +--- org.springframework:spring-oxm:6.1.13
|         |    +--- jakarta.xml.bind:jakarta.xml.bind-api:3.0.1 -> 4.0.2 (*)
|         |    +--- org.springframework:spring-beans:6.1.13 (*)
|         |    \--- org.springframework:spring-core:6.1.13 (*)
|         +--- org.springframework:spring-aop:6.1.13 (*)
|         +--- org.springframework:spring-context-support:6.1.13 (*)
|         \--- org.slf4j:slf4j-api:2.0.2 -> 2.0.16
+--- org.apache.cxf:cxf-spring-boot-starter-jaxws:4.0.3
|    +--- org.springframework.boot:spring-boot-starter:3.0.10 -> 3.3.4 (*)
|    +--- org.springframework.boot:spring-boot-starter-web:3.0.10 -> 3.3.4 (*)
|    +--- org.apache.cxf:cxf-spring-boot-autoconfigure:4.0.3
|    |    \--- org.springframework.boot:spring-boot-autoconfigure:3.0.10 -> 3.3.4 (*)
|    +--- org.apache.cxf:cxf-rt-transports-http:4.0.3
|    |    \--- org.apache.cxf:cxf-core:4.0.3
|    |         +--- jakarta.annotation:jakarta.annotation-api:2.1.1
|    |         +--- org.glassfish.jaxb:jaxb-runtime:3.0.2 -> 4.0.5
|    |         |    \--- org.glassfish.jaxb:jaxb-core:4.0.5
|    |         |         +--- jakarta.xml.bind:jakarta.xml.bind-api:4.0.2 (*)
|    |         |         +--- jakarta.activation:jakarta.activation-api:2.1.3
|    |         |         +--- org.eclipse.angus:angus-activation:2.0.2
|    |         |         |    \--- jakarta.activation:jakarta.activation-api:2.1.3
|    |         |         +--- org.glassfish.jaxb:txw2:4.0.5
|    |         |         \--- com.sun.istack:istack-commons-runtime:4.1.2
|    |         +--- com.fasterxml.woodstox:woodstox-core:6.5.1
|    |         |    \--- org.codehaus.woodstox:stax2-api:4.2.1
|    |         +--- org.apache.ws.xmlschema:xmlschema-core:2.3.1
|    |         +--- org.eclipse.angus:angus-activation:2.0.1 -> 2.0.2 (*)
|    |         \--- jakarta.xml.bind:jakarta.xml.bind-api:3.0.1 -> 4.0.2 (*)
|    +--- org.apache.cxf:cxf-rt-frontend-jaxws:4.0.3
|    |    +--- xml-resolver:xml-resolver:1.2
|    |    +--- org.ow2.asm:asm:9.5 -> 9.6
|    |    +--- org.apache.cxf:cxf-core:4.0.3 (*)
|    |    +--- org.apache.cxf:cxf-rt-bindings-soap:4.0.3
|    |    |    +--- jakarta.xml.soap:jakarta.xml.soap-api:2.0.1 -> 3.0.2 (*)
|    |    |    +--- jakarta.jws:jakarta.jws-api:3.0.0
|    |    |    +--- jakarta.xml.ws:jakarta.xml.ws-api:3.0.1 (*)
|    |    |    +--- org.apache.cxf:cxf-core:4.0.3 (*)
|    |    |    +--- org.apache.cxf:cxf-rt-wsdl:4.0.3
|    |    |    |    +--- org.apache.cxf:cxf-core:4.0.3 (*)
|    |    |    |    +--- wsdl4j:wsdl4j:1.6.3
|    |    |    |    \--- org.ow2.asm:asm:9.5 -> 9.6
|    |    |    +--- org.apache.cxf:cxf-rt-databinding-jaxb:4.0.3
|    |    |    |    +--- org.apache.cxf:cxf-core:4.0.3 (*)
|    |    |    |    \--- org.apache.cxf:cxf-rt-wsdl:4.0.3 (*)
|    |    |    \--- org.eclipse.angus:angus-activation:2.0.1 -> 2.0.2 (*)
|    |    +--- org.apache.cxf:cxf-rt-bindings-xml:4.0.3
|    |    |    \--- org.apache.cxf:cxf-core:4.0.3 (*)
|    |    +--- org.apache.cxf:cxf-rt-frontend-simple:4.0.3
|    |    |    +--- org.apache.cxf:cxf-core:4.0.3 (*)
|    |    |    +--- org.apache.cxf:cxf-rt-bindings-soap:4.0.3 (*)
|    |    |    +--- org.apache.cxf:cxf-rt-wsdl:4.0.3 (*)
|    |    |    \--- org.eclipse.angus:angus-mail:1.0.0 -> 2.0.3
|    |    |         +--- jakarta.activation:jakarta.activation-api:2.1.3
|    |    |         +--- jakarta.mail:jakarta.mail-api:2.1.3
|    |    |         |    \--- jakarta.activation:jakarta.activation-api:2.1.3
|    |    |         \--- org.eclipse.angus:angus-activation:2.0.2 (*)
|    |    +--- org.apache.cxf:cxf-rt-ws-addr:4.0.3
|    |    |    +--- org.apache.cxf:cxf-core:4.0.3 (*)
|    |    |    +--- org.apache.cxf:cxf-rt-bindings-soap:4.0.3 (*)
|    |    |    \--- org.apache.cxf:cxf-rt-ws-policy:4.0.3
|    |    |         +--- wsdl4j:wsdl4j:1.6.3
|    |    |         +--- org.apache.cxf:cxf-core:4.0.3 (*)
|    |    |         \--- org.apache.neethi:neethi:3.2.0
|    |    \--- org.eclipse.angus:angus-activation:2.0.1 -> 2.0.2 (*)
|    +--- org.apache.cxf:cxf-rt-features-metrics:4.0.3
|    |    +--- jakarta.xml.ws:jakarta.xml.ws-api:3.0.1 (*)
|    |    \--- org.apache.cxf:cxf-core:4.0.3 (*)
|    +--- jakarta.validation:jakarta.validation-api:3.0.2
|    \--- org.springframework.boot:spring-boot-starter-validation:3.0.10 -> 3.3.4 (*)
+--- org.apache.cxf:cxf-rt-features-logging:4.0.3
|    +--- jakarta.xml.ws:jakarta.xml.ws-api:3.0.1 (*)
|    +--- org.apache.cxf:cxf-core:4.0.3 (*)
|    \--- org.slf4j:slf4j-api:2.0.9 -> 2.0.16
+--- io.github.threeten-jaxb:threeten-jaxb-core:2.1.0
|    \--- jakarta.xml.bind:jakarta.xml.bind-api:3.0.1 -> 4.0.2 (*)
+--- com.azure.spring:spring-cloud-azure-dependencies:5.19.0 (*)
+--- com.azure.spring:spring-cloud-azure-starter-keyvault -> 5.19.0 (*)
+--- com.azure:azure-security-keyvault-keys -> 4.9.1
|    +--- com.azure:azure-core:1.54.1 (*)
|    +--- com.azure:azure-json:1.3.0
|    \--- com.azure:azure-core-http-netty:1.15.7 (*)
+--- com.azure:azure-storage-blob -> 12.29.0
|    +--- com.azure:azure-xml:1.1.0
|    +--- com.azure:azure-core:1.54.0 -> 1.54.1 (*)
|    +--- com.azure:azure-core-http-netty:1.15.6 -> 1.15.7 (*)
|    +--- com.azure:azure-storage-common:12.28.0
|    |    +--- com.azure:azure-xml:1.1.0
|    |    +--- com.azure:azure-core:1.54.0 -> 1.54.1 (*)
|    |    \--- com.azure:azure-core-http-netty:1.15.6 -> 1.15.7 (*)
|    \--- com.azure:azure-storage-internal-avro:12.14.0
|         +--- com.azure:azure-xml:1.1.0
|         +--- com.azure:azure-core:1.54.0 -> 1.54.1 (*)
|         \--- com.azure:azure-storage-common:12.28.0 (*)
+--- com.azure:azure-identity -> 1.14.2 (*)
+--- org.springframework.statemachine:spring-statemachine-core:4.0.0
|    +--- org.springframework:spring-tx:6.0.14 -> 6.1.13 (*)
|    +--- org.springframework:spring-messaging:6.0.14 -> 6.1.13
|    |    +--- org.springframework:spring-beans:6.1.13 (*)
|    |    \--- org.springframework:spring-core:6.1.13 (*)
|    \--- io.projectreactor:reactor-core:3.5.12 -> 3.6.10 (*)
+--- org.apache.commons:commons-lang3:3.13.0
+--- commons-validator:commons-validator:1.9.0
|    +--- commons-beanutils:commons-beanutils:1.9.4 (*)
|    +--- commons-digester:commons-digester:2.1
|    +--- commons-logging:commons-logging:1.3.2
|    \--- commons-collections:commons-collections:3.2.2
+--- org.apache.commons:commons-pool2:2.12.0
+--- com.github.ben-manes.caffeine:caffeine:3.1.8 (*)
+--- org.springdoc:springdoc-openapi-starter-webmvc-ui:2.3.0
|    +--- org.springdoc:springdoc-openapi-starter-webmvc-api:2.3.0
|    |    +--- org.springdoc:springdoc-openapi-starter-common:2.3.0
|    |    |    +--- org.springframework.boot:spring-boot-autoconfigure:3.2.0 -> 3.3.4 (*)
|    |    |    \--- io.swagger.core.v3:swagger-core-jakarta:2.2.19
|    |    |         +--- org.apache.commons:commons-lang3:3.13.0
|    |    |         +--- org.slf4j:slf4j-api:2.0.9 -> 2.0.16
|    |    |         +--- io.swagger.core.v3:swagger-annotations-jakarta:2.2.19
|    |    |         +--- io.swagger.core.v3:swagger-models-jakarta:2.2.19
|    |    |         |    \--- com.fasterxml.jackson.core:jackson-annotations:2.15.2 -> 2.17.2 (*)
|    |    |         +--- org.yaml:snakeyaml:2.2
|    |    |         +--- jakarta.xml.bind:jakarta.xml.bind-api:3.0.0 -> 4.0.2 (*)
|    |    |         +--- jakarta.validation:jakarta.validation-api:3.0.2
|    |    |         +--- com.fasterxml.jackson.core:jackson-annotations:2.15.2 -> 2.17.2 (*)
|    |    |         +--- com.fasterxml.jackson.core:jackson-databind:2.15.2 -> 2.17.2 (*)
|    |    |         +--- com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.15.2 -> 2.17.2
|    |    |         |    +--- com.fasterxml.jackson.core:jackson-databind:2.17.2 (*)
|    |    |         |    +--- org.yaml:snakeyaml:2.2
|    |    |         |    +--- com.fasterxml.jackson.core:jackson-core:2.17.2 (*)
|    |    |         |    \--- com.fasterxml.jackson:jackson-bom:2.17.2 (*)
|    |    |         \--- com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.15.2 -> 2.17.2 (*)
|    |    \--- org.springframework:spring-webmvc:6.1.1 -> 6.1.13 (*)
|    \--- org.webjars:swagger-ui:5.10.3
+--- com.github.librepdf:openpdf:2.0.2
+--- org.jetbrains:annotations:23.0.0
+--- io.sentry:sentry:7.15.0
\--- org.springframework.boot:spring-boot-starter-tomcat -> 3.3.4 (*)

@anuchandy
Copy link
Member

It looks like one of the dependency is overriding the reactor-core:3.4.41 that azure-core:1.54.1 brings to 3.6.10. Could you explicitly pin reactor-core to 3.4.41 or find that dependency bringing 3.6.10 and use a version of that dependency relies on 3.4.41? the second option is preferable because we've seen cases where the version loaded runtime/packaged differs from the explicitly pinned one (and listed by mvn dependency:tree).

(We're currently looking into upgrading from 3.4.41 to 3.7.x but ran into a few weird issues related to timers.)

So, as a first step, let's see if this random issue persists if we align the dependency versions.

@anuchandy
Copy link
Member

Also, internally library will indeed retry on "Cannot send a message when request response channel is disposed" event, this event is represented by the exception type – RequestResponseChannelClosedException. The retry for sender on this exception happens here

It is possible that the retry or associated recovery was affected by CPU throttling. From the dependency tree, cores seem to be shared across the pools associated with HTTP, database, WebSocket, Service Bus/Event Hubs.

When experimenting with 3.4.41 as discussed in the last comment, I would temporarily bump up the cores (for example 4 vcpu) and observe. Probably it worth referring to the first section of this writeup Average CPU usage can be misleading. Also, the Microsoft Java Team recommends at least 2 vCPUs when running Java apps on hosts like App Service.

@s-vivien
Copy link
Author

s-vivien commented Jan 23, 2025

Thanks for your answers. I'll take in look at the dependencies and follow your instructions.
In the meantime, I can tell you that we are using the Premium v3 P2V3 plan, so we have 4 vCPU per instance, but we also have very heavy trafic.

Here is the graph showing several thread and CPU metrics during the last 3 days, and the amount of sending errors we got. I'm not sure we can asses a direct correlation between these but maybe you can :

Image

@anuchandy
Copy link
Member

anuchandy commented Jan 24, 2025

Thanks for the additional information. Yes, let's align the dependencies so we can avoid any unknowns.

Looking at the graph, it seems the host often reaches ~93-95% and stays in that range 5-6 hours. I'm not sure the timeline across these graphs in sync w.r.t reporting time. but, if we look at the period where there were sent errors, there seems an overlaps between that and such high CPU utilization period.

It is possible that, for some reason, the CPU load indirectly causes the connection to lose (it could be transient errors as well). The error we're seeing, "disposed-channel", is a side effect of losing connection. When the current AMQP connection is lost, the single IO-Thread associated with that connection is responsible for cleaning up internal states and resources then initiating retry for new connection. If this IO-thread is throttled (i.e., not made runnable) due to CPU load, it may not progress effectively. Since there is no fairness among which thread gets picked to run, timer threads can still trigger while the IO-Thread lags. The fact that the library eventually resumes sending suggests that the IO-Thread completes its work eventually and new IO-Thread taken charge. When the IO-Thread of a disconnected connection is halted or lags like this, any send calls during this time will wait for a new active connection to be ready, creating a queue of waiting tasks that can time out if a new connection is not available within the set timeout period.

From my understanding, the overall ~93-95% sustained CPU peek is concerning. Based on my reading on this topic and discussions I’ve seen internally, the safe target upper range is between 60-70%. I’m not an expert in this topic, and it is case by case, but you may want to explore having multiple instances sharing the traffic / font end to balance the load, so the CPU usage stays in the reasonable range and all components (Redis, Http, Cosmos, Service Bus / Event Hubs etc..) gets its fair share.

Furthermore, it is worth examining the garbage collection (GC) events to determine if they are contributing to the CPU spikes. If the application components generate a significant amount of garbage during traffic, and memory is insufficient then frequent major GC events can happen which impede overall performance. Reviewing this can help to decide if heap needs to be tuned.


Edit: I tried to find more information about app service CPU metrics, but it is unclear whether this environment is also susceptible to CPU throttling, with no visible correlation to average CPU usage (as noted in the writeup linked in my previous comment).

@anuchandy
Copy link
Member

After aligning the version and tuning the CPU and/or Memory if required, and if the "channel-closed" error is still occurring under a reasonable CPU and Memory range, could collect SDK DEBUG logs for 20 minutes before and 10 minutes after the first "channel-closed" error? Enabling and collecting logs from only one app instance is sufficient.

The instructions to collect the logs can be found here (note: "AMQP transport logs" are NOT required but only SDK logs).

A log line with correct formatting will look like below (i.e. columns as timestamp, message (in json form), logger (name of the logger class), thread and log-level)

Image

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Client This issue points to a problem in the data-plane of the library. customer-reported Issues that are reported by GitHub users external to the Azure organization. needs-team-attention Workflow: This issue needs attention from Azure service team or SDK team question The issue doesn't require a change to the product in order to be resolved. Most issues start as that Service Bus
Projects
None yet
Development

No branches or pull requests

2 participants