Configuring Connection Details

This section provides instructions for configuring the connection details required to establish communication between your PubSub+ event broker and your third-party system.

PubSub+ Connection Details

The Spring Cloud Stream Binder for PubSub+ uses Spring Boot Auto-Configuration for the Solace Java API to configure its session. In the application.yml, this typically is configured as follows:

solace:
  java:
    host: tcp://localhost:55555
    msg-vpn: default
    client-username: default
    client-password: default    

For more information and options to configure the PubSub+ session, see Spring Boot Auto-Configuration for the Solace Java API.

Preventing Message Loss when Publishing to Topic-to-Queue Mappings

If the connector is publishing to a topic that is subscribed to by a queue, messages may be lost if they are rejected (for example, if queue ingress is shut down).

To prevent message loss, configure the reject-msg-to-sender-on-discard option with the including-when-shutdown flag.

MQTT Connection Details

The Spring Cloud Stream Binder for MQTT uses the following configuration to configure Connector for MQTT connection.

spring:
  cloud:
    stream:
      bindings:
        input-0:
          destination: # configure MQTT subscribe topic
          binder: mqtt
        output-0:
          destination: # configure solace topic where MQTT events are published   
          binder: solace
mqtt:
  java:
    url: # MQTT Host
    version: # v3 or v5(default is set to v3)
    username: # username to connect to MQTT broker
    password: # password to connect to MQTT broker
    cleanSession: # default is set to true
    connectionTimeout: # default is set to 30
    keepAliveInterval: # default is set to 60
    persistence: # default is memory
    persistenceDirectory: # default is /tmp/mqtt
    automaticReconnect: # default is false
    automaticReconnectDelay: # default is 0
    sessionExpiryInterval: # default is null
    receiveMaximum: # default is null
    maximumPacketSize: # default is null
    topicAliasMaximum: # default is null
    requestResponse: # default is false
    requestProblemInfo: # default is false
    userProperties: # key-value pair
      property-1 : # value
      property-2 : # value
    ssl:
      caFile: # absolute path to file. default is empty
      clientCertificateFile: # absolute path to file. default is empty
      clientKeyFile: # absolute path to file. default is empty
      password: # client key file password if set. default is empty
      sslHostNameVerification: # default is false
    willAndTestament:
      lastWillTopic: # default is null
      lastWillQos: # default is 0
      lastWillRetain: # default is false
      payload: # default is null
      payloadFormatIndicator: # default is false
      willDelayInterval: # default is null
      messageExpiryInterval: # default is null
      contentType: # default is empty
      responseTopic: # default is empty
      correlationData: # default is empty

MQTT Producer Configuration Options

The following configuration options are all prefixed by spring.cloud.stream.mqtt.bindings.<channelname>.producer.

If these properties need to be applied by default to all producers, use the spring.cloud.stream.mqtt.default.producer prefix.

 

Config Option Type Valid Values Default Value Description

clientId

string

any

Randomly generated Universal Unique Identifier (UUID)

The property to set the client identifier for the producer.

qos

integer

0, 1, 2

1

The property to set the level of the quality of service for the published event.

retained

boolean

true or false

 

false

 

The property to retain published messages.

async

 

boolean

 

true or false

 

false

 

The property to use asynchronous publishing.

allowedHeaders

string[]

 

empty

For MQTT V5, the list of headers to be included in or excluded from the user properties.

To exclude a header, prefix it with !. For example, !timestamp, * excludes timestamp and includes all other headers.

MQTT Consumer Configuration Options

The following configuration options are all prefixed by spring.cloud.stream.mqtt.bindings.<channelname>.consumer.

If these properties need to be applied by default to all producers, use the spring.cloud.stream.mqtt.default.consumer prefix.

 

Config Option Type Valid Values Default Value Description

clientId

string

any

Randomly generated Universal Unique Identifier (UUID)

The property to set the client identifier for the producer.

qos

integer

0,1,2

1

The property to set the level of the quality of service for the subscribed event.

binary

boolean

true or false

false

The property to convert the size units of the payload to bytes.

allowedHeaders

string[]

 

empty

For MQTT V5, the list of headers to be included in or excluded from the user properties.

To exclude a header, prefix it with !. For example, !timestamp, * excludes timestamp and includes all other headers.

dltEnabled

boolean

true or false

false

The property to enable dead-letter topics (DLT) for failed consumer messages. If dltName is not configured, failed consumer messages are forwarded to the dlt/{source-topic-name} topic.

dltName

string

valid MQTT topic name

empty

The name of the DLT. If dltEnabled is set to true, failed consumer messages are forwarded to the topic that is configured with dltName.

Connecting to Multiple Systems

To connect to multiple systems of a same type, use the multiple binder syntax.    

For example:

spring:
  cloud:
    stream:
      binders:
      
      # 1st solace binder in this example
      solace1:
        type: solace
        environment: 
          solace: 
            java:
              host: tcp://localhost:55555

      # 2nd solace binder in this example
      solace2: 
        type: solace
        environment: 
          solace:
            java:
              host: tcp://other-host:55555

        # The only mqtt binder
        mqtt1:  
          type: mqtt
          # Add `environment` property map here if you need to customize this binder.
          # But for this example, we'll assume that defaults are used.

        # Required for internal use
        undefined:
          type: undefined
      bindings: 
        input-0:
          destination: <input-destination>
          binder: mqtt1
        output-0:
          destination: <output-destination> 
          binder: solace1 # Reference 1st solace binder
        input-1:
          destination: <input-destination>
          binder: mqtt1 
        output-1:
          destination: <output-destination>
          binder: solace2 # Reference 2st solace binder

The configuration above defines two binders of type solace and one binder of type mqtt, which are then referenced within the bindings.

Each binder above is configured independently under spring.cloud.stream.binders.<bindername>.environment..

  • When connecting to multiple systems, all binder configuration must be specified using the multiple binder syntax for all binders. For example, under the spring.cloud.stream.binders.<binder-name>.environment.

  • Do not use single-binder configuration (for example, solace.java.* at the root of your application.yml) while using the multiple binder syntax.