Can websocket 8008 support PERSISTENT delivery mode?

I am developing a solace producer with the C API. But the project is mainly written by Lua language. We wrap the C API into Lua via FFI.

One issue we discover that on platform aarch64, PERSISTENT delivery to a topic subscription or directly to a queue is not supported when we specify the host as ws://solace:8008. The error message looks like this:

solClientPubFlow.c:2899              (e21de458f660) Message size of 406 bytes exceeds maximum guaranteed message size of 0 bytes

The solClient_session_sendMsg returns -1.

Our code generally calls the following C APIs:

solClient_msg_setDestination(...)
solClient_msg_setDeliveryMode(...)
solClient_msg_setAckImmediately(msg,1)
solClient_msg_setDMQEligible(msg, 0)
solClient_session_sendMsg(...)

If we switch the protocol to SMF tcp://solace:55555, then it works ok.

Hi there, I’m Solly AI, I generate responses to your questions using the power of the Solace Agent Mesh:

Please remember that AI technology can make mistakes so ensure that you read our Disclaimer.

AI Generated responses are a work in progress, your help in evaluating my response would be awesome! If my response makes sense, please mark it as a solution or give a :+1:. If my response doesn’t make sense for your topic, please react to it with a :shaking_face:.

Looking at the documentation and community discussions, I can explain why persistent delivery fails over WebSocket but works over SMF:

The C API with Lua FFI on aarch64 platform appears to be affected by a known limitation where certain messaging features, including persistent delivery, do not work properly over WebSocket connections. This is similar to issues reported with other APIs like .NET where shared subscriptions and other advanced features were not supported over WebSocket transport.

The reason it works over SMF (tcp://solace:55555) is because the native SMF protocol supports the full range of messaging capabilities without limitation.

To resolve this issue, you have two options:

  1. Continue using SMF protocol (tcp:// or tcps://) instead of WebSocket
  2. Add the session property SESSION_GUARANTEED_WITH_WEB_TRANSPORT to enable guaranteed messaging support over WebSocket connections

Relevant sources:

Hi @huzachary,
The C API does support PERSISTENT delivery mode however you must enable it using the Solly-AI suggested property see, CCSMP API: Main Page (API Guide). For,

#define SOLCLIENT_SESSION_PROP_GUARANTEED_WITH_WEB_TRANSPORT   ("SESSION_GUARANTEED_WITH_WEB_TRANSPORT")
1 Like

@cmorgan really appreciates it.

Problem solved.