SolaceProducts / solace-spring-cloud

An umbrella project containing all Solace projects for Spring Cloud
Apache License 2.0
22 stars 15 forks source link

Support setting client channel settings via apiProperties in spring cloud stream solace binder #95

Closed ghost closed 3 years ago

ghost commented 3 years ago

SolaceJavaAutoConfigurationBase supports adding properties via the apiProperties configuration item in spring boot, e.g:

spring.cloud.solace.binders.name.environment.apiProperties

I am looking to set compressionLevel to 1, as the default of 0 is severely reducing performance to <200msg/s level.

SolaceJavaAutoConfigurationBase adds a prefix of "jcsmp." to all properties that are in apiProperties before combining them with the autowired properties (from SolaceJavaProperties),

JCSMPClientChannelProperties is built based on any pre-existing "client_channel" properties in the resulting properties, but that is impossible as its based on SolaceJavaProperties (fixed list) and the apiProperties list (with prefixes, so not identified). To add, there are a few connection settings that are possible to set via properties, but not compression level.

Is there another way to set properties like compressionLevel for the spring cloud stream binder?

Nephery commented 3 years ago

Try using CLIENT_CHANNEL_PROPERTIES instead of client_channel.

For example, to set compression level, use this as the key:

spring.cloud.stream.binders.<binder-name>.environment.solace.java.apiProperties.CLIENT_CHANNEL_PROPERTIES.compressionLevel

Or if you're using yaml:

spring:
  cloud:
    stream:
      binders:
        <binder-name>:
          type: solace
          environment:
            solace:
              java:
                apiProperties:
                  CLIENT_CHANNEL_PROPERTIES:
                    compressionLevel: 1