spring整合activemq设置prefetchSize

最近在工作中使用到了activemq,由于消费者这边涉及大量计算,比较耗时,发送方数据也是源源不断的过来,目前的配置是有两个消费客户端在监听,为了让消息更均衡的分配到这两个消费者端,需要设置prefetchSize小点,activemq默认的是1000。
在网上看的都是按照下面的配置设置prefetchSize,我尝试过都不管用,不知道是哪个步骤设置的不对。

这里写图片描述

按照下面的配置是可以正确设置prefetchSize的,本人已实验过。

<!--author: kxl -->
<bean id="connectionFactory" class="org.apache.activemq.pool.PooledConnectionFactory"
          destroy-method="stop">
        <property name="connectionFactory">
            <bean class="org.apache.activemq.ActiveMQConnectionFactory">
                <property name="brokerURL">
                    <value>${jms.mms.news.broker.url}</value>
                </property>
                <property name="prefetchPolicy" ref="prefetchPolicy" />  
     <!--     <property name="optimizeAcknowledge" value="true" />  -->
         <property name="useAsyncSend" value="true" />

            </bean>
        </property>
        <property name="maxConnections" value="100"></property>
    </bean>

 <bean id="prefetchPolicy" class="org.apache.activemq.ActiveMQPrefetchPolicy">
    <property name="queuePrefetch" value="10" />
  </bean> 

    <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
        <property name="connectionFactory">
            <ref local="connectionFactory" />
        </property>
        <property name="pubSubDomain" value="false" />
    </bean>

    <bean id="mmsNewsDestination" class="org.apache.activemq.command.ActiveMQQueue">
        <constructor-arg index="0" value="mmsNewsQueue"/>
    </bean>

可在activemq管理后台看配置的是否正确
这里写图片描述

点开Queue名字为mmsNewsQueue的队列,然后点击
View Consumers

这里写图片描述

这里connection ID有十个的原因是我设置了consumer端并发消费的线程数是10个。用concurrency=”10-20”表示,最大为20个。

可以看一下接收消息方的配置


    <bean id="connectionFactory" class="org.apache.activemq.pool.PooledConnectionFactory"
          destroy-method="stop">
        <property name="connectionFactory">
            <bean class="org.apache.activemq.ActiveMQConnectionFactory">
                <property name="brokerURL">
                    <value>${jms.mms.news.broker.url}</value>
                </property>
            </bean>
        </property>
        <property name="maxConnections" value="100"></property>
    </bean>


    <jms:listener-container container-type="default"
                            connection-factory="connectionFactory"
                            concurrency="10-20"
                            acknowledge="auto">
        <jms:listener destination="mmsNewsQueue" ref="mmsNewsMessageListener"/>
    </jms:listener-container>

猜你喜欢

转载自blog.csdn.net/u010248330/article/details/79507071