|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
由于这些智能化家电的市场需求没有预期的高,Sun放弃了该项计划。就在Oak几近失败之时,随着互联网的发展,Sun看到了Oak在计算机网络上的广阔应用前景,于是改造了Oak,在利用MessageQueue的过程当中,总会因为各种缘故原由而招致动静失利。一个典范的场景是一个天生者向Queue中发动静,内里包括了一组邮件地点和邮件内容。而消耗者从Queue中将动静一条条读出来,向指定邮件地点发送邮件。消耗者在发送动静的过程当中因为各种缘故原由会招致失利,好比收集超时、以后邮件服务器不成用等。如许我们就但愿创建一种机制,关于未发送乐成的邮件再从头发送,也就是从头处置。从头处置凌驾必定次数还不乐成,就保持对该动静的处置,纪录上去,持续对残剩动静举行处置。
ActiveMQ为我们完成了这一功效,叫做ReDelivery(从头送达)。当消耗者在处置动静时有非常产生,会将动静从头放回Queue里,举行下一次处置。当凌驾重试次数时,动静会被安排到一个特别的Queue中,即DeadLetterQueue,简称DLQ,用于举行后续剖析。
空话未几说,一同来完成吧。(该示例中的全体代码已安排到GitHub上,请自行下载。)
仍是接着本系列中的示例代码来举行。要完成ReDelivery功效,要给LinsterContainer加上事件处置。设置SimpleMessageListenerContainer的sessionTransacted属性为true。
activeMQConnection.xml- <!--MessageReceiverDefinition--><beanid="messageReceiver"class="huangbowen.net.jms.retry.MessageReceiver"></bean><beanclass="org.springframework.jms.listener.SimpleMessageListenerContainer"><propertyname="connectionFactory"ref="connectionFactory"/><propertyname="destinationName"value="${jms.queue.name}"/><propertyname="messageListener"ref="messageReceiver"/><propertyname="sessionTransacted"value="true"/></bean>
复制代码 然后创立一个ReDeliveryPolicy,来界说ReDelivery的机制。
activeMQConnection.xml- <amq:redeliveryPolicyid="activeMQRedeliveryPolicy"destination="#defaultDestination"redeliveryDelay="100"maximumRedeliveries="4"/>
复制代码 这里设置ReDelivery的工夫距离是100毫秒,最年夜重发次数是4次。
在ActiveMQ的ConnectionFactory中使用这个Policy。就是给ConnectionFactory设置属性redeliveryPolicy为我们方才创立的Policy。
activeMQConnection.xml- <!--Activemqconnectionfactory--><beanid="amqConnectionFactory"class="org.apache.activemq.ActiveMQConnectionFactory"><propertyname="brokerURL"value="${jms.broker.url}?"/><propertyname="useAsyncSend"value="true"/><propertyname="redeliveryPolicy"ref="activeMQRedeliveryPolicy"/></bean>
复制代码 如许ReDelivery机制就设置好了。那末怎样能证实我不是在忽悠你们那?固然最好的举措是写主动化测试来测试这个功效了。
起首修正下broker的设置,将其抵消息的耐久化设置为false,如许每次运转测试时Queue中动静都为0,用于复原现场。然后设置一个DestinationPolicy,当动静凌驾重试次数仍未被准确处置时,就把它放进到以DLQ.为前缀的Queue中。因为ActiveMQ默许对非耐久化的Message不放进DLQ中的,以是手动设置processNonPersistent为true。
activeMQConnection.xml- 123456789101112131415161718
复制代码- <amq:brokerid="activeMQBroker"persistent="false"><amq:transportConnectors><amq:transportConnectoruri="${jms.broker.url}"/></amq:transportConnectors><amq:destinationPolicy><amq:policyMap><amq:policyEntries><amq:policyEntryqueue=">"><amq:deadLetterStrategy><amq:individualDeadLetterStrategyqueuePrefix="DLQ."useQueueForQueueMessages="true"processExpired="true"processNonPersistent="true"/></amq:deadLetterStrategy></amq:policyEntry></amq:policyEntries></amq:policyMap></amq:destinationPolicy></amq:broker>
复制代码
Java到底会发战成什么样,让我们拭目以待吧,我始终坚信着java会更好。以上都是俺个人看法,欢迎大家一起交流. |
|