我正在尝试通过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,或者它会开始将它们分配给磁盘。因此,您的经纪配置再次相关(当然也是网络(。