I am trying to follow microsoft documentation on connecting to azure service bus using spring-cloud-azure-starter-servicebus.
Pom file :
<properties>
<java.version>17</java.version>
<spring-cloud-azure.version>5.9.1</spring-cloud-azure.version>
<spring-cloud.version>2023.0.0</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.azure.spring</groupId>
<artifactId>spring-cloud-azure-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- Azure Service bus -->
<dependency>
<groupId>com.azure.spring</groupId>
<artifactId>spring-cloud-azure-starter-servicebus</artifactId>
</dependency>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-messaging-servicebus</artifactId>
<version>7.15.0</version>
</dependency>
</dependencies>
Java code:
@Configuration(proxyBeanMethods = false)
@Slf4j
public class ProcessorClientConfiguration {
@Bean
ServiceBusRecordMessageListener processMessage() {
return context -> {
ServiceBusReceivedMessage message = context.getMessage();
log.info("Processing message. Id: %s, Sequence #: %s. Contents: %s%n", message.getMessageId(),
message.getSequenceNumber(), message.getBody());
};
}
@Bean
ServiceBusErrorHandler processError() {
return context -> {
log.error("Error when receiving messages from namespace: '%s'. Entity: '%s'%n",
context.getFullyQualifiedNamespace(), context.getEntityPath());
};
}
}
application.properties value:
spring.cloud.azure.servicebus.namespace=Endpoint=sb://sbns-...
spring.cloud.azure.servicebus.entity-name=data-preprod
spring.cloud.azure.servicebus.processor.subscription-name=data-preprod
spring.cloud.azure.servicebus.entity-type=topic
ERROR:
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.azure.messaging.servicebus.ServiceBusClientBuilder$ServiceBusReceiverClientBuilder]: Factory method 'serviceBusReceiverClientBuilder' threw exception with message: Subscription cannot be null.
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:177) ~[spring-beans-6.1.3.jar!/:6.1.3]
at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:647) ~[spring-beans-6.1.3.jar!/:6.1.3]
... 26 common frames omitted
Caused by: java.lang.IllegalArgumentException: Subscription cannot be null.
As per my observation, this error occurred because you have used
entity-type=topicinstead ofentity-type=Queueinapplication.properties.I got the same error when I tried with Topic but worked as expected with Queue type.
I have followed the same MSDOC to send messages to Service Bus Queue using Spring Boot Application.
Steps followed:
pom.xml:
ServiceBusProcessorClientConfiguration.java:
DemoController.java:
application.properties:
Portal: