Skip to content

I don't think the DefaultServiceBusNamespaceProcessorFactory in the Service Bus SDK can use a shared ServiceBusClientBuilder. Is issue 37932 actually resolved? #47741

@timmy-ly

Description

@timmy-ly

Query/Question
My question is in reference to the following issue
#37932 .

In my shallow opinion it is still not possible to use a shared ServiceBusClientBuilder with the DefaultServiceBusNamespaceProcessorFactory. The doCreateProcessor() method constructs new ServiceBusSessionProcessorClientBuilderFactory instances on each call. The constructor chain then arrives at

AbstractServiceBusSubClientBuilderFactory(P properties, List<AzureServiceClientBuilderCustomizer<ServiceBusClientBuilder>> serviceClientBuilderCustomizers) {
        this((ServiceBusClientBuilder)null, properties, serviceClientBuilderCustomizers);

    protected AbstractServiceBusSubClientBuilderFactory(ServiceBusClientBuilder serviceBusClientBuilder, P properties, List<AzureServiceClientBuilderCustomizer<ServiceBusClientBuilder>> serviceBusClientBuilderCustomizers) {
        this.properties = properties;
        if (serviceBusClientBuilder != null) {
            this.serviceBusClientBuilder = serviceBusClientBuilder;
            this.shareServiceBusClientBuilder = true;
            this.serviceBusClientBuilderFactory = null;
        } else {
            this.serviceBusClientBuilderFactory = new ServiceBusClientBuilderFactory(properties);
            if (serviceBusClientBuilderCustomizers != null) {
                ServiceBusClientBuilderFactory var10001 = this.serviceBusClientBuilderFactory;
                Objects.requireNonNull(var10001);
                serviceBusClientBuilderCustomizers.forEach(var10001::addBuilderCustomizer);
            }

            this.serviceBusClientBuilder = null;
            this.shareServiceBusClientBuilder = false;
        }

    }

    }

which just sets this.serviceBusClientBuilder to null. Thus,

    protected ServiceBusClientBuilder getServiceBusClientBuilder() {
        if (this.serviceBusClientBuilder == null && this.serviceBusClientBuilderFactory != null) {
            this.serviceBusClientBuilder = (ServiceBusClientBuilder)this.serviceBusClientBuilderFactory.build();
        }

        return this.serviceBusClientBuilder;
    }

will create a new ServiceBusClientbuilder instance.

Since DefaultServiceBusNamespaceProcessorFactory is final, you cannot even inherit it to override doCreateProcessor() . What do you think? My objective is to use a shared ServiceBusClientBuilder in order to reduce the number of TCP connections established with ServiceBus. Since I am working with only one namespace, my application should be able to reuse a single TCP connection instead of creating one connection per Sender and per Receiver.

Why is this not a Bug or a feature Request?
The referenced issue is marked as completed, but I need clarification on why it is completed.

Setup (please complete the following information if applicable):

  • Library/Libraries: com.azure.spring.messaging.servicebus.core 6.1.0

Information Checklist
Kindly make sure that you have added all the following information above and checkoff the required fields otherwise we will treat the issuer as an incomplete report

  • Query Added
  • No setup required

Metadata

Metadata

Assignees

Labels

ClientThis issue points to a problem in the data-plane of the library.Service AttentionWorkflow: This issue is responsible by Azure service team.Service Buscustomer-reportedIssues that are reported by GitHub users external to the Azure organization.needs-team-attentionWorkflow: This issue needs attention from Azure service team or SDK teamquestionThe issue doesn't require a change to the product in order to be resolved. Most issues start as that

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions