Skip to content

[FEATURE REQ] Configration consistency with spring cloud stream #36161

Open
@dhananjay12

Description

@dhananjay12

[We use spring cloud stream abstraction in our codebase and the relevant binders gets decided based on build/deployment. Binders we use - activemq, kafka, rabbit and recently started using azure-service-bus binders.

We noticed some differences wrt properties key (some missing) that been used. For example

  1. Max concurrent messages client should process (introduced new servicebus layer and changed the name for concurrency and prefetch)
    ActiveMQ binder:
spring:
  cloud:
    stream:
      bindings:
        renderChannelMessage:
          consumer:
            concurrency: 10
            prefetch: 1000

ASB binder:

spring:
  cloud:
    stream:
      servicebus:
        bindings:
      	  renderChannelMessage:
      	    consumer:
      		  max-concurrent-calls: 10
      		  prefetch-count: 1000
  1. Retry mechanism configuration is completely different and there are 2 types- Exponential, Fixed
    ActiveMQ binder:
spring:
  cloud:
    stream:
      default:
        consumer:
          backOffInitialInterval: 10000
          backOffMaxInterval: 40000
          backOffMultiplier: 2.0

ASB binder:

spring:
  cloud:
    azure:
      retry:
        mode: exponential
        exponential:
          max-retries: 5
          base-delay: PT2S
          max-delay: PT60S
  1. Global configuration for consumer is not found for ASB (needs more investigation) which includes concurrency and prefetch
    ActiveMQ binder:
spring:
  cloud:
    stream:
      default:
        consumer:
          concurrency: 10
          prefetch: 1000

ASB binder:

N/A
  1. Group configuration is still under investigation in how to make it work because not clear how this work for ASB
    ActiveMQ binder:
spring:
  cloud:
    stream:
      bindings:
        renderChannelMessage:
          group: ceo-group

ASB binder:

spring:
  cloud:
    stream:
      bindings:
        renderChannelMessage:
          group: <uuid-id-generated-dynamically-for-each-env>

NOTE: the 4th issue is really a struggle as we have to get the ID and then update the relevant services with it. Redo the same if its incase of re-creation of topics.

Describe the solution you'd like
I would like a consistent naming convention with Spring. Dealing with properties while using azure-binders can be a bit of a struggle due to the differences in property names. Switching among other binders is easy since the same property keys work for all, but if the deployment uses azure-service-binders, one has to find the equivalent properties.

Additional context
We understand that there are two similar services like eventhubs and servicebus that require different keys. However, the last part of the key, such as concurrency vs max-concurrent-calls or prefetch vs prefetch-count, could be made similar. Spring allows two properties to be mapped to the same key without the need to change the existing key.

Also, for values like in spring.cloud.stream.bindings.renderChannelMessage.group, friendly names should be allowed, which get automatically mapped.

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

  • Description Added
  • Expected solution specified

Metadata

Metadata

Assignees

Labels

ClientThis issue points to a problem in the data-plane of the library.azure-springAll azure-spring related issuesazure-spring-eventhubsSpring event hubs related issues.azure-spring-servicebusSpring service bus related issues.customer-reportedIssues that are reported by GitHub users external to the Azure organization.feature-requestThis issue requires a new behavior in the product in order be resolved.needs-team-attentionWorkflow: This issue needs attention from Azure service team or SDK team

Type

No type

Projects

Status

Todo

Relationships

None yet

Development

No branches or pull requests

Issue actions