Problem with performance of our solace consumer
We are struggling with the performance of a pub/sub test fixture that publishes to a solace broker at a fixed rate. We expect our consumer to consume the same rate. We were able to publish and subscribe at a rate of 1000 messages per second. However when we tried to publish 2000 three hundred byte XML messages per second (to a topical endpoint), we saw the broker receive that data, but the broker queue begin to fill.
In the following picture we see more than a million messages queued at the broker, due to the inability for our consumer to keep up.
We are using the following production configuration:
- nondurable endpoints
- message delivery mode is set to direct (nonpersistent)
- 300 byte messages
- 2000 messages per second
- jcsmp session configured to use SUPPORTED_MESSAGE_ACK_CLIENT
We are sending in the following fashion:
We are using the following consumer design:
We are using the FlowReceiver receiveNoWait method.
We've also tried to call receive with a timeout. However we want receive to return immediately if no data is available (yet a timeout of 0 seems to block).
We've configured the consumer thread to read everything that is available as fast as possible. We will only have the thread sleep when receiveNoWait returns no data.
receiveNoWait seems to return null frequently even when there are still messages in the broker topical endpoint.
We are have configured the broker using default configurations consistent with online instructions for setting up solace.