Github user qihongxu commented on the issue:
https://github.com/apache/activemq-artemis/pull/2484
@michaelandrepearce As presented in test result adding a specific executor
do improve producer rates, and also means page() method in PagingStoreImpl will
acquire writelock more often. At the same time QueueImpl::deliver will call
isPaging() to check whether queue is paging or not, which acquire readlock and
make it a race condition. This may explain why the increase of producer rates
is accompanied by the decrease of consumer rates.
According to this we have an internal branch that removes isPaging()
methodâs readlock in PagingStoreImpl, along with adding pageSyncTimerâs
specific executor. After that we performed a same test and get a result of
21k/25k Send&Receiveâin total 46k TPS. This version runs smoothly in our use
case but we are still exploring potential effects.
The reason why we use transactional receive is to make sure every message
indeed delivered and consumed. Say that if we do non-tx receive and consumer
system fail in the following processing chain, this message may be delivered
but actually âlostâ. So we choose to let consumer decide when should they
ack and commit, instead of auto-commit acks.
---