RFA EventQueue bottleneck

I am using the below codes for event dispatch, where EVENT_TIMEOUT_PERIOD = 0

I found that only 350-400 events can be dispatched every second, is there any configuration I can set to increase the throttle rate?
(if there are messages in the queue, 350-400 events will be dispatched every second,
if there is no message in the queue, it will loop about 100000 times every second)

void dispatchEvent()
{
long dispatchReturn = simpleConsumer.getEventQueue()->dispatch(EVENT_TIMEOUT_PERIOD);
}

I tried to apply the following configuration but it doesnt work

\Connections\Connection_RSSL\watchListTableSize = 100001
\Connections\Connection_RSSL\guaranteedOutputBuffers = 1000
\Connections\Connection_RSSL\numInputBuffers = 1000
\Connections\Connection_RSSL\throttleEnabled = true
\Connections\Connection_RSSL\throttleType = "count"
\Connections\Connection_RSSL\throttleBatchCount = 500
\Connections\Connection_RSSL\throttleMaxCount = 1000

\Sessions\Session1\connectionList = "Connection_RSSL"
\Sessions\Session1\threadModel = "Dual"

Tagged:

Best Answer

  • warat.boonyanit
    Answer ✓

    When you call dispatch() and there is an event available, RFA will invokes the client callback method. The client callback method executes in the same thread that call dispatch().

    It is your callback method that slow down your dispatch rate.

    image

    This usually means you put a process heavy code or
    blocking code in the client callback.

    There is no configuration that would help. You have to avoid
    blocking code yourself.

    You can decode the message in the client callback but once you got the data you want you should pass it to another thread that will do the blocking code and let
    the dispatching thread dispatch next event.