Managing Guaranteed Messaging

The Guaranteed Messaging facility can be used to ensure that the delivery of a message between two applications is guaranteed even in cases where the receiving application is off line, or there is a failure of a piece of network equipment. Once a Solace router has acknowledged receiving a Guaranteed message from a publisher, it is committed to delivering that message.

Guaranteed Messaging also ensures that published messages can be reliably delivered to each matching client once and only once, and that messages are delivered in the order they are published.

Note:  To support Guaranteed Messaging, a Solace router must have Guaranteed Messaging and message spooling enabled. By default, these are not enabled for physical router (that is, an appliance), but they are enabled for a virtual messaging routing (VMR). An appliance must also have an Assured Delivery Blade (ADB) and a Host Bus Adapter (HBA) installed.

Feature Interoperability Limitations

Observe the following limitations:

  • Topic endpoint subscriptions follow the “deliver always” paradigm in the Deliver-To-One messaging feature.
  • With the exception of message spool-specific details, the show User EXEC commands do not make a distinction between durable and non-durable destinations. That is, the same show commands and options exists for both durable and non-durable destinations.
  • Guaranteed temporary destinations and their content survive a redundancy switch provided that the bind from the client occurs within the switchover time.
  • Guaranteed messages are not routed between Solace routers. The Multiple‑Node Routing feature is for use with Direct messages only.
  • The Web messaging APIs for JavaScript, Silverlight, and ActionScript do not support Guaranteed Messaging.

Functional Parameters to Consider When Provisioning Endpoints

Functional parameters to consider when provisioning queues and topic endpoints on Solace routers include:

  • technology used by connected client. For example:
    • Solace enterprise Messaging API
    • Solace Web messaging API
    • non-Solace technology: OpenMAMA API, REST messaging, MQTT
  • endpoint durability: durable or non-durable
  • message delivery type: Guaranteed or Direct
  • message type: persistent, non-persistent, or Direct

The following table lists the supported queue and topic endpoint functionality. When created, the associated client durability and message delivery attributes for queues and topic endpoints are assigned.

Supported Queue and Topic Endpoint Functionality


Durable Client

Non-Durable Guaranteed Client

Non-Durable Direct Client

Destination Types

queue, topic endpoint

temporary queue, topic/temporary topic

temporary queue, topic/temporary topic

Endpoints Survive Client Disconnect?


Yes, but only within a certain period of time (a short delay for client disconnect/connect case)


Endpoints Survive Redundancy Switchover?


Yes, but only in the case of a client reconnect within a certain period of time


Requires physical ADB?

Yes, if endpoint is on a physical appliance

Yes, if endpoint is on a physical appliance


Guaranteed Message Ordering?

Yes, but with the exception of non‑exclusive queues, which can shuffle message order for the sake of load balancing



Guaranteed Message Expiry (TTL)?




Messages Survive Client Disconnects?


Yes, but only within a certain period of time (a short delay for client disconnect/connect case)


Messages Survive Redundancy Switchover?


Yes, but only within a certain period of time (a short delay for client disconnect/connect case)


Client Access Type

Exclusive queue, non-exclusive queue, one-and-only-one durable topic endpoint

At most one client

At most one client

Configuring Guaranteed Messaging

To enable clients to publish Guaranteed messages to and receive Guaranteed messages from a Solace router, the following router configuration steps must be performed:

Note:  For JMS clients, the Connection Factory that is used must have the direct‑transport property set to false so that messages will be delivered using the Guaranteed Transport mode instead of the default Direct Transport mode. Refer to Configuring Connection Factories.

Transaction Configuration

For client applications to publish and/or receive messages in local or XA transactions, you must also perform the additional configurations:

  • Enable transaction support in the client profile to be used. Refer to Allowing Transacted Sessions.
  • If required, increase the value for the maximum number of transactions permitted property for the client profile used. Refer to Configuring the Max Number Transactions.
  • For XA transactions, enable the xa property for the Connection Factory that is used. This property allows connecting JMS clients to also use XA transactions. (By default, this property is not enabled for the default Solace Connection Factory.)

CLI Command Sequence Example

The following CLI command sequence example shows the tasks required to start Guaranteed Messaging and configure a queue and topic endpoint on a Solace router.

Note:  This example assumes that basic router configuration tasks, such as starting the Message VPN and tasks described in Managing Appliance Interfaces, have been completed beforehand.

solace(configure)# hardware message-spool

solace(configure/hardware/message-spool)# disk-array wwn60:06:01:60:e8:60:1c:00:02:88:44:db:5d:6d:de:11

solace(configure/hardware/message-spool)# no shutdown primary

solace(configure/hardware/message-spool)# end


solace(configure)# client-profile default

solace(configure/client-profile)# allow-guaranteed-message-receive

solace(configure/client-profile)# allow-guaranteed-message-send

solace(configure/client-profile)# exit


solace(configure)# client-username default message-vpn default

solace(configure/client-username)# client-profile default

solace(configure/client-username)# no shutdown

solace(configure/client-username)# exit


solace(configure)# message-spool message-vpn default

solace(configure/message-spool)# max-spool-usage 60000

solace(configure/message-spool)# create queue testQueue

solace(configure/message-spool/queue)# permission all modify-topic

solace(configure/message-spool/queue)# no shutdown

solace(configure/message-spool/queue)# exit

solace(configure/message-spool)# create topic-endpoint testTopicEndpoint

solace(configure/message-spool/topic-endpoint)# permission all modify-topic

solace(configure/message-spool/topic-endpoint)# no shutdown

solace(configure/message-spool/topic-endpoint)# end