[BUG] Failed to create consumer binding;when creating Spring-Cloud-Stream project with ServiceBus binder
vyom-soft opened this issue · 4 comments
Hello,
Could you please see the issue;
I am following the sample proposed by azure.
https://github.com/Azure-Samples/azure-spring-boot-samples/tree/main/servicebus/azure-spring-cloud-stream-binder-servicebus-topic/servicebus-topic-binder
I get this exception
ServiceBus processor client startup failed, Caused by null; nested exception is java.lang.NullPointerException
defined in null: Cannot register bean definition [Root bean: class [org.springframework.integration.handler.advice.ErrorMessageSendingRecoverer]
Exception or Stack Trace
2021-09-09 17:09:45.754 ERROR 43532 --- [ restartedMain] c.a.s.i.s.topic.ServiceBusTopicTemplate : ServiceBus processorClient startup failed, Caused by null
2021-09-09 17:09:52.637 ERROR 43532 --- [ restartedMain] o.s.cloud.stream.binding.BindingService : Failed to create consumer binding; retrying in 30 seconds
org.springframework.cloud.stream.binder.BinderException: Exception thrown while starting consumer:
at org.springframework.cloud.stream.binder.AbstractMessageChannelBinder.doBindConsumer(AbstractMessageChannelBinder.java:462) ~[spring-cloud-stream-3.1.3.jar:3.1.3]
at org.springframework.cloud.stream.binder.AbstractMessageChannelBinder.doBindConsumer(AbstractMessageChannelBinder.java:91) ~[spring-cloud-stream-3.1.3.jar:3.1.3]
at org.springframework.cloud.stream.binder.AbstractBinder.bindConsumer(AbstractBinder.java:143) ~[spring-cloud-stream-3.1.3.jar:3.1.3]
at org.springframework.cloud.stream.binding.BindingService.doBindConsumer(BindingService.java:177) ~[spring-cloud-stream-3.1.3.jar:3.1.3]
at org.springframework.cloud.stream.binding.BindingService.bindConsumer(BindingService.java:134) ~[spring-cloud-stream-3.1.3.jar:3.1.3]
at org.springframework.cloud.stream.binding.AbstractBindableProxyFactory.createAndBindInputs(AbstractBindableProxyFactory.java:118) ~[spring-cloud-stream-3.1.3.jar:3.1.3]
at org.springframework.cloud.stream.binding.InputBindingLifecycle.doStartWithBindable(InputBindingLifecycle.java:58) ~[spring-cloud-stream-3.1.3.jar:3.1.3]
at java.base/java.util.LinkedHashMap$LinkedValues.forEach(LinkedHashMap.java:647) ~[na:na]
at org.springframework.cloud.stream.binding.AbstractBindingLifecycle.start(AbstractBindingLifecycle.java:57) ~[spring-cloud-stream-3.1.3.jar:3.1.3]
at org.springframework.cloud.stream.binding.InputBindingLifecycle.start(InputBindingLifecycle.java:34) ~[spring-cloud-stream-3.1.3.jar:3.1.3]
at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:178) ~[spring-context-5.3.9.jar:5.3.9]
at org.springframework.context.support.DefaultLifecycleProcessor.access$200(DefaultLifecycleProcessor.java:54) ~[spring-context-5.3.9.jar:5.3.9]
at org.springframework.context.support.DefaultLifecycleProcessor$LifecycleGroup.start(DefaultLifecycleProcessor.java:356) ~[spring-context-5.3.9.jar:5.3.9]
at java.base/java.lang.Iterable.forEach(Iterable.java:75) ~[na:na]
at org.springframework.context.support.DefaultLifecycleProcessor.startBeans(DefaultLifecycleProcessor.java:155) ~[spring-context-5.3.9.jar:5.3.9]
at org.springframework.context.support.DefaultLifecycleProcessor.onRefresh(DefaultLifecycleProcessor.java:123) ~[spring-context-5.3.9.jar:5.3.9]
at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:935) ~[spring-context-5.3.9.jar:5.3.9]
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:586) ~[spring-context-5.3.9.jar:5.3.9]
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:145) ~[spring-boot-2.5.4.jar:2.5.4]
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754) ~[spring-boot-2.5.4.jar:2.5.4]
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) ~[spring-boot-2.5.4.jar:2.5.4]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:338) ~[spring-boot-2.5.4.jar:2.5.4]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1343) ~[spring-boot-2.5.4.jar:2.5.4]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1332) ~[spring-boot-2.5.4.jar:2.5.4]
at de.vyom.servicebus.ServiceBusApplication.main(ServiceBusApplication.java:27) ~[classes/:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:564) ~[na:na]
at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49) ~[spring-boot-devtools-2.5.4.jar:2.5.4]
Caused by: com.azure.spring.integration.servicebus.ServiceBusRuntimeException: ServiceBus processor client startup failed, Caused by null; nested exception is java.lang.NullPointerException
at com.azure.spring.integration.servicebus.topic.ServiceBusTopicTemplate.internalSubscribe(ServiceBusTopicTemplate.java:121) ~[azure-spring-integration-servicebus-2.8.0.jar:na]
at com.azure.spring.integration.servicebus.topic.ServiceBusTopicTemplate.subscribe(ServiceBusTopicTemplate.java:71) ~[azure-spring-integration-servicebus-2.8.0.jar:na]
at com.azure.spring.integration.core.api.SubscribeByGroupOperation.subscribe(SubscribeByGroupOperation.java:30) ~[azure-spring-integration-core-2.8.0.jar:na]
at com.azure.spring.integration.core.AbstractInboundChannelAdapter.doStart(AbstractInboundChannelAdapter.java:43) ~[azure-spring-integration-core-2.8.0.jar:na]
at org.springframework.integration.endpoint.AbstractEndpoint.start(AbstractEndpoint.java:157) ~[spring-integration-core-5.5.3.jar:5.5.3]
at org.springframework.cloud.stream.binder.AbstractMessageChannelBinder.doBindConsumer(AbstractMessageChannelBinder.java:415) ~[spring-cloud-stream-3.1.3.jar:3.1.3]
... 29 common frames omitted
Caused by: java.lang.NullPointerException: null
at com.azure.spring.integration.servicebus.topic.ServiceBusTopicTemplate.internalSubscribe(ServiceBusTopicTemplate.java:114) ~[azure-spring-integration-servicebus-2.8.0.jar:na]
... 34 common frames omitted
2021-09-09 17:09:52.678 INFO 43532 --- [ restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ''
2021-09-09 17:09:52.778 INFO 43532 --- [ restartedMain] d.vyom.servicebus.ServiceBusApplication : Started ServiceBusApplication in 116.506 seconds (JVM running for 119.025)
2021-09-09 17:10:22.644 INFO 43532 --- [ scheduling-1] c.a.s.i.servicebus.ServiceBusTemplate : ServiceBusTemplate checkpoint config becomes: CheckpointConfig{checkpointMode=MANUAL, checkpointCount=0, checkpointInterval=null}
2021-09-09 17:15:59.296 INFO 43532 --- [ scheduling-1] o.s.i.monitor.IntegrationMBeanExporter : Registering MessageChannel exam-topic.tsubscription-one.errors
2021-09-09 17:15:59.306 ERROR 43532 --- [ scheduling-1] o.s.cloud.stream.binding.BindingService : Failed to create consumer binding; retrying in 30 seconds
To Reproduce
Please follow the spring cloud stream Azure sample.
https://github.com/Azure-Samples/azure-spring-boot-samples/tree/main/servicebus/azure-spring-cloud-stream-binder-servicebus-topic/servicebus-topic-binder
Code Snippet
spring:
cloud:
azure:
servicebus:
connection-string: [sb://techem-broker.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=z2m+xtLp9D9r7l0dyXk9rEa4K3KXi7pKGjS4L4bhRj8=]
stream:
bindings:
consume-in-0:
destination: exam-topic
group: tsubscription-one
supply-out-0:
destination: exam-topic
servicebus:
topic:
bindings:
consume-in-0:
consumer:
checkpoint-mode: MANUAL
function:
definition: consume;supply;
poller:
fixed-delay: 1000
initial-delay: 0
autoconfigure:
exclude: com.azure.spring.cloud.autoconfigure.servicebus.AzureServiceBusQueueAutoConfiguration
profiles:
active: manual
Expected behavior
At leaset the given sample should run.
Setup (please complete the following information):
- OS: [Ubuntu 21.04 (ubuntu-latest)]
- IDE: IntelliJ Ultimate
- Library/Libraries: [
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.4</version>
<relativePath/>
</parent>
<groupId>de.vyom</groupId>
<artifactId>servicebus</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>servicebus</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>11</java.version>
<azure.version>3.6.1</azure.version>
<spring-cloud.version>2020.0.3</spring-cloud.version>
<testcontainers.version>1.15.3</testcontainers.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.azure.spring</groupId>
<artifactId>azure-spring-cloud-stream-binder-servicebus-topic</artifactId>
<version>2.8.0</version>
</dependency>
<dependency>
<groupId>com.azure.spring</groupId>
<artifactId>azure-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-stream</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>2020.0.3</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.azure.spring</groupId>
<artifactId>azure-spring-boot-bom</artifactId>
<version>3.6.1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project>
]
- Java version: [11]
- App Server/Environment: [ Tomcat]
- Frameworks: [Spring Cloud Stream, Spring Boot]
Additional context application.yaml
spring:
cloud:
azure:
servicebus:
connection-string: [sb://vyomsoft-broker.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=g5u+mtPp9H9r3l0dyXk9rEb3K3WXi2pNGsT4L4bhZc9=]
stream:
bindings:
consume-in-0:
destination: exam-topic
group: tsubscription-one
supply-out-0:
destination: exam-topic
servicebus:
topic:
bindings:
consume-in-0:
consumer:
checkpoint-mode: MANUAL
function:
definition: consume;supply;
poller:
fixed-delay: 1000
initial-delay: 0
autoconfigure:
exclude: com.azure.spring.cloud.autoconfigure.servicebus.AzureServiceBusQueueAutoConfiguration
profiles:
active: manual
Thank you.
@yiliuTo could you please follow up with @vyom-soft
Hi @vyom-soft , could you try with using another format of connection-string?
Your current format is [sb://techem-broker.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=z2m+xtLp9D9r7l0dyXk9rEa4K3KXi7pKGjS4L4bhRj8=]
, you can replace it as Endpoint=sb://techem-broker.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=z2m+xtLp9D9r7l0dyXk9rEa4K3KXi7pKGjS4L4bhRj8=
. I just reproduce and resolve your issue by the above solution.
Hi @vyom-soft , could you try with using another format of connection-string?
Your current format is
[sb://techem-broker.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=z2m+xtLp9D9r7l0dyXk9rEa4K3KXi7pKGjS4L4bhRj8=]
,
you can replace it as
Endpoint=sb://techem-broker.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=z2m+xtLp9D9r7l0dyXk9rEa4K3KXi7pKGjS4L4bhRj8=
. I just reproduce and resolve your issue by the above solution.
Hi @yiliuTo 👍 Thank you for verifying the issue.
I confirm that after I adapted the signature for connection-string as mentioned in your reply. The error is no longer seen.
Please close the issue.
I have a query.
After the consume function has read from the topic; Is it possible to call a Rest endpoint.