Class ServiceBusClientBuilder

java.lang.Object
com.azure.messaging.servicebus.ServiceBusClientBuilder
All Implemented Interfaces:
AmqpTrait<ServiceBusClientBuilder>, AzureNamedKeyCredentialTrait<ServiceBusClientBuilder>, AzureSasCredentialTrait<ServiceBusClientBuilder>, ConfigurationTrait<ServiceBusClientBuilder>, ConnectionStringTrait<ServiceBusClientBuilder>, TokenCredentialTrait<ServiceBusClientBuilder>

The builder to create Service Bus clients:

Instantiate a synchronous sender

 // Retrieve 'connectionString' and 'queueName' from your configuration.
 ServiceBusClientBuilder builder = new ServiceBusClientBuilder()
     .connectionString(connectionString);
 ServiceBusSenderClient sender = builder
     .sender()
     .queueName(queueName)
     .buildClient();
 

Instantiate an asynchronous receiver

 // Retrieve 'connectionString', 'topicName' and 'subscriptionName' from your configuration.
 ServiceBusClientBuilder builder = new ServiceBusClientBuilder()
     .connectionString(connectionString);
 ServiceBusReceiverAsyncClient receiver = builder
     .receiver()
     .disableAutoComplete() // Allows user to take control of settling a message.
     .topicName(topicName)
     .subscriptionName(subscriptionName)
     .buildAsyncClient();
 

Instantiate an asynchronous session receiver

 // Retrieve 'connectionString', 'topicName' and 'subscriptionName' from your configuration.
 ServiceBusSessionReceiverAsyncClient sessionReceiver = new ServiceBusClientBuilder()
     .connectionString(connectionString)
     .sessionReceiver()
     .receiveMode(ServiceBusReceiveMode.PEEK_LOCK)
     .topicName(topicName)
     .subscriptionName(subscriptionName)
     .buildAsyncClient();

 // Receiving messages from the first available sessions. It waits up to the AmqpRetryOptions.getTryTimeout().
 // If no session is available within that operation timeout, it completes with an error. Otherwise, a receiver
 // is returned when a lock on the session is acquired.
 Mono<ServiceBusReceiverAsyncClient> receiverMono = sessionReceiver.acceptNextSession();

 Flux.usingWhen(receiverMono,
     receiver -> receiver.receiveMessages(),
     receiver -> Mono.fromRunnable(receiver::close))
     .subscribe(message -> System.out.println(message.getBody().toString()));
 

Instantiate the processor

 // Retrieve 'connectionString' and 'queueName' from your configuration.
 ServiceBusClientBuilder builder = new ServiceBusClientBuilder()
     .connectionString(connectionString);
 ServiceBusProcessorClient processor = builder
     .processor()
     .queueName(queueName)
     .processMessage(System.out::println)
     .processError(context -> System.err.println(context.getErrorSource()))
     .buildProcessorClient();
 

Sharing a connection between clients

The creation of physical connection to Service Bus requires resources. If your architecture allows, an application should share connection between clients which can be achieved by sharing the top level builder as shown below.
 // Retrieve 'connectionString' and 'queueName' from your configuration.
 // Create shared builder.
 ServiceBusClientBuilder sharedConnectionBuilder = new ServiceBusClientBuilder()
     .connectionString(connectionString);
 // Create receiver and sender which will share the connection.
 ServiceBusReceiverClient receiver = sharedConnectionBuilder
     .receiver()
     .queueName(queueName)
     .buildClient();
 ServiceBusSenderClient sender = sharedConnectionBuilder
     .sender()
     .queueName(queueName)
     .buildClient();
 

Clients for sending messages

Clients for receiving messages

Clients for receiving messages from a session-enabled Service Bus entity

Client for receiving messages using a callback-based processor