为什么在将持久性 activemq 消息更改为非持久性消息时无法获得性能提升?



我正在尝试通过ActiveMQ Broker获得更高的速度。

问题是,我没有得到极大的完善性提升。通过我的服务将10000个持久消息从队列发送至队列№2大约需要2分40秒。并且发送10000个非持久消息大约需要2分20秒。我希望能够以非持久模式的X10速度完善。实际上,我可以将其设置为" false":

<property name="transacted" value="false"/>

但这不是一个选择,我需要对有目的的消息进行交易模式。

我已经配置了这样的ActiveMQ:

<bean class="org.apache.activemq.ActiveMQConnectionFactory" id="jmsConnectionFactory">
        <property name="brokerURL" value="${AMQ.URL}"/>
        <property name="userName" value="${AMQ.USER}"/>
        <property name="password" value="${AMQ.PASSWORD}"/>
    </bean>
    <bean class="org.apache.activemq.pool.PooledConnectionFactory"
        destroy-method="stop" id="jmsConnectionPool" init-method="start">
        <property name="maxConnections" value="10"/>
        <property name="connectionFactory" ref="jmsConnectionFactory"/>
    </bean>
    <bean class="org.apache.camel.component.jms.JmsConfiguration" id="jmsConfig">
        <property name="connectionFactory" ref="jmsConnectionPool"/>
        <property name="concurrentConsumers" value="10"/>
        <property name="preserveMessageQos" value="true"/>
        <property name="transacted" value="true"/>
        <property name="cacheLevelName" value="CACHE_CONSUMER"/>
    </bean>
    <bean class="org.apache.activemq.camel.component.ActiveMQComponent" id="activemq">
        <property name="configuration" ref="jmsConfig"/>
    </bean>

骆驼测试路线:

<route id="SRV.TEST">
       <description>Test route</description>
       <from uri="{{mqName}}:queue:{{test.in}}"/>
       <to uri="{{mqName}}:queue:{{test.out}}"/>
</route>

有人可以帮忙,我在做什么错?

正如贾斯汀所说,交易性和持久性是JMS中的独立方面,尽管非持久消息的交易非常值得怀疑 - 如果您想要交易的保证酸。

持续消息的大部分性能都取决于您的代理配置,尤其是消息存储的后端。因此,如果您确实想要交易(这有点暗示您想要持久性(,则应尝试配置快速消息存储,例如在写入快速存储中使用kahadb,例如闪存缓冲SSD或SAN。

另一种选择可能是使用Activemq,Artemis(https://activemq.apache.org/components/artemis/(的现代化变体,该变体具有更快的附录 - 仅存储。

如果您没有持久性进行,这对您的用例可能会很好,您可以考虑丢弃交易(无论如何都不耐用(,但请注意,当写作到队列的确切消息。

在骆驼中,可以使用URI上的 deliverypersististent 选项完成此操作。

<to uri="{{mqName}}:queue:{{test.out}}?deliveryPersistent=false"/>

在您的示例中,您确实需要确保将所有传入的消息写入输入队列 {{test.in}}} 已经已经 nonnon-persistent!

瞬态非持久消息也需要适合您的经纪人的RAM,或者它会开始将它们分配给磁盘。因此,您的经纪配置再次相关(当然也是网络(。

最新更新