🎄 Happy Holidays! 🥳
Most of Solace is closed December 24–January 1 so our employees can spend time with their families. We will re-open Thursday, January 2, 2024. Please expect slower response times during this period and open a support ticket for anything needing immediate assistance.
Happy Holidays!
Please note: most of Solace is closed December 25–January 2, and will re-open Tuesday, January 3, 2023.
C++, Max clients exceeded for queue
Hi,
I would like to send Guaranteed messages to a queue and then read them back within a C++ project.
I have managed to create a session (solClient_session_create), then I created a transacted session (solClient_session_createTransactedSession). When creating a flow (solClient_transactedSession_createFlow), I get the following error
- ReturnCode=Fail
- SubCode=SOLCLIENT_SUBCODE_MAX_CLIENTS_FOR_QUEUE
- ResponseCode=503
- Info=Max clients exceeded for queue
SOLACE_RET_CODE_CHK(solClient_session_createTransactedSession(nullptr, this->m_SolSession, &this->m_transacted_session, nullptr)); solClient_flow_createFuncInfo_t function_info = SOLCLIENT_SESSION_CREATEFUNC_INITIALIZER; function_info.rxMsgInfo.callback_p = nullptr; function_info.rxMsgInfo.user_p = nullptr; function_info.eventInfo.callback_p = common_flow_event_callback; auto index = 0; char* flow_properties[10]; flow_properties[index++] = SOLCLIENT_FLOW_PROP_BIND_BLOCKING; flow_properties[index++] = SOLCLIENT_PROP_ENABLE_VAL; flow_properties[index++] = SOLCLIENT_FLOW_PROP_BIND_ENTITY_ID; flow_properties[index++] = SOLCLIENT_FLOW_PROP_BIND_ENTITY_QUEUE; flow_properties[index++] = SOLCLIENT_FLOW_PROP_BIND_NAME; flow_properties[index++] = "MY_QUEUE" flow_properties[index++] = SOLCLIENT_FLOW_PROP_BIND_ENTITY_DURABLE; flow_properties[index++] = SOLCLIENT_PROP_ENABLE_VAL; flow_properties[index] = nullptr; SOLACE_RET_CODE_CHK(solClient_transactedSession_createFlow(flow_properties, this->m_transacted_session, &this->m_flow, &function_info, sizeof(function_info)));
I would like to create one transacted session and flow for a "writer" and the same session and flow for a "reader". Do you happen to know why I get the error?
I have got an access to a web portal where I can configure VPNs and queues.
Thank you, Martin.
Answers
-
Hi @martinpelak,
Have you enabled transacted session permissions in your client profile? Have a look in PubSub+ Manager -> -> Access Control -> Client Profiles -> default -> Settings and look for "Use Transacted Sessions".
Also, please change
function_info.rxMsgInfo.callback_p = nullptr;
to something non null. It's where your messages will be received.0 -
Hi,
Thank you. I enabled it before posting my question. I use
solClient_flow_receiveMsg
to receive messages.Thank you, Martin.
0 -
OK, good. I assume you've set the Maximum Consumer Count to greater than 0?
solClient_flow_receiveMsg
will receive messages for your flow (= queue).rxMsgInfo.callback_p
is for an direct (non-queued) messages. For testing code it's probably fine if you're not subscribing to anything, but please don't go in to prod with that set to null.0 -
Thank you. The Maximum Consumer Count is set to 1000.
So you suggest that I set
rxMsgInfo.callback_p
to anything even though I plan on using justsolClient_flow_receiveMsg
to receive messages? I noticed that in this example, the callback is set to null as well. Would an empty function be ok?solClient_rxMsgCallback_returnCode_t rx_message_flow_callback(solClient_opaqueFlow_pt opaque_flow, solClient_opaqueMsg_pt message, void* user) { return SOLCLIENT_CALLBACK_OK; }
I am quite new to Solace so any piece of advice is appreciated.
0 -
Hmm. This error is definitely related to the number of connections being exhausted somewhere. Can you check the Message VPN and system maximum connection counts?
The callback comment is a bit of diversion - I see it as best practice to not have it set to NULL.
0