consumer配置
- prefetchPolicy.queuePrefetch : 预获取策略的queue消费者预获取的大小,默认值为:1000
- prefetchPolicy.queueBrowserPrefetch:queue浏览者预获取的大小,默认值为:500
- prefetchPolicy.topicPrefetch:topic消费者预获取的大小,默认值为:32767
- prefetchPolicy.durableTopicPrefetch:持久化的topic消费者预获取的大小,默认值为:100
- prefetchPolicy.optimizeDurableTopicPrefetch:优化的。。。,默认值为:1000
- prefetchPolicy.maximumPendingMessageLimit:针对非持久化的topic慢消费者,允许丢失的消息个数,默认值为:0
- optimizeAcknowledge:设置为true,表示优化确认机制。消费者处理完消息后,发送ack响应给broker。
- optimizeAcknowlegeTimeOut:消费者发送ack响应的超时时间。默认值为:300ms
- exclusiveConsumer:设置为true,表示独占消费。用来保证获取消息的顺序性。
- dispatchAysnc:异步调度。true:(异步,快消费者); false:(同步,慢消费者,高吞吐量)
- useRetroactiveConsumer:使用回溯。
- redeliveryPolicy.maximumRedeliveryDelay:重试的最大延迟时间,默认为-1,不设置延迟时间
- redeliveryPolicy.maximumRedeliveries:重试的最多次数,默认为6
- redeliveryPolicy.initialRedeliveryDelay:初始重试的延迟时间,默认为1秒。
- redeliveryPolicy.useCollisionAvoidance:是否使用避免冲突。默认为false。(是否成倍增加延迟时间)
- redeliveryPolicy.backOffMultiplier:增加的倍数,默认为5。
消费者配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!-- 真正可以产生Connection的ConnectionFactory,由对应的 JMS服务厂商提供-->
<bean id="targetConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
<property name="brokerURL" value="tcp://192.168.0.111:61616"/>
<property name="dispatchAsync" value="true"/>
<property name="optimizeAcknowledge" value="true"/>
<property name="optimizeAcknowledgeTimeOut" value="300"/>
<property name="prefetchPolicy.durableTopicPrefetch" value="100"/>
<property name="prefetchPolicy.topicPrefetch" value="32767"/>
<property name="prefetchPolicy.optimizeDurableTopicPrefetch" value="1000"/>
<property name="prefetchPolicy.queuePrefetch" value="1000"/>
<property name="prefetchPolicy.queueBrowserPrefetch" value="500"/>
<property name="prefetchPolicy.maximumPendingMessageLimit" value="0"/>
<property name="exclusiveConsumer" value="true"/>
<property name="useRetroactiveConsumer" value="true"/>
<property name="redeliveryPolicy.maximumRedeliveries" value="6"/>
<property name="redeliveryPolicy.maximumRedeliveryDelay" value="-1"/>
<property name="redeliveryPolicy.initialRedeliveryDelay" value="1000"/>
<property name="redeliveryPolicy.useCollisionAvoidance" value="false"/>
<property name="redeliveryPolicy.backOffMultiplier" value="5"/>
</bean>
<!-- Spring用于管理真正的ConnectionFactory的ConnectionFactory -->
<bean id="connectionFactory" class="org.springframework.jms.connection.SingleConnectionFactory">
<!-- 目标ConnectionFactory对应真实的可以产生JMS Connection的ConnectionFactory -->
<property name="targetConnectionFactory" ref="targetConnectionFactory"/>
</bean>
<!--这个是队列目的地,点对点的 文本信息-->
<bean id="queueTextDestination" class="org.apache.activemq.command.ActiveMQQueue">
<constructor-arg value="mq-queue1"/>
</bean>
<!--这个是订阅模式 文本信息-->
<bean id="topicTextDestination" class="org.apache.activemq.command.ActiveMQTopic">
<constructor-arg value="topic_text"/>
</bean>
<!-- 我的监听类 -->
<bean id="myMessageListener" class="com.mzs.listener.MyMessageListener"/>
<!-- 消息监听容器 -->
<bean class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<property name="connectionFactory" ref="connectionFactory" />
<property name="destination" ref="queueTextDestination" />
<property name="messageListener" ref="myMessageListener" />
</bean>
<bean class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<property name="connectionFactory" ref="connectionFactory" />
<property name="destination" ref="topicTextDestination" />
<property name="messageListener" ref="myMessageListener" />
</bean>
</beans>
producer配置
- alwaysSyncSend:总是同步发送。默认为false。
- useAsyncSend:使用异步发送。默认为false。
- producerWindowSize:在得到broker响应之前,可以发送给broker的最大字节数。默认为0。
- sendTimeout:发送的超时时间。默认为0。
生产者配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<context:component-scan base-package="com.mzs.mq"/>
<!-- 真正可以产生Connection的ConnectionFactory,由对应的 JMS服务厂商提供-->
<bean id="targetConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
<property name="brokerURL" value="tcp://192.168.0.111:61616?"/>
<property name="alwaysSyncSend" value="false"/>
<property name="useAsyncSend" value="true"/>
<property name="producerWindowSize" value="1024000"/>
<property name="sendTimeout" value="0"/>
</bean>
<!-- Spring用于管理真正的ConnectionFactory的ConnectionFactory -->
<bean id="connectionFactory" class="org.springframework.jms.connection.SingleConnectionFactory">
<!-- 目标ConnectionFactory对应真实的可以产生JMS Connection的ConnectionFactory -->
<property name="targetConnectionFactory" ref="targetConnectionFactory"/>
</bean>
<!-- Spring提供的JMS工具类,它可以进行消息发送、接收等 -->
<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
<!-- 这个connectionFactory对应的是我们定义的Spring提供的那个ConnectionFactory对象 -->
<property name="connectionFactory" ref="connectionFactory"/>
</bean>
<!--这个是队列目的地,点对点的 文本信息-->
<bean id="queueTextDestination" class="org.apache.activemq.command.ActiveMQQueue">
<constructor-arg value="queue_text"/>
</bean>
<!--这个是订阅模式 文本信息-->
<bean id="topicTextDestination" class="org.apache.activemq.command.ActiveMQTopic">
<constructor-arg value="topic_text"/>
</bean>
</beans>