JAVA网页编程之ActiveMQ第五弹:增添ReDelivery功能仓酷云
由于这些智能化家电的市场需求没有预期的高,Sun放弃了该项计划。就在Oak几近失败之时,随着互联网的发展,Sun看到了Oak在计算机网络上的广阔应用前景,于是改造了Oak,在利用MessageQueue的过程当中,总会因为各种缘故原由而招致动静失利。一个典范的场景是一个天生者向Queue中发动静,内里包括了一组邮件地点和邮件内容。而消耗者从Queue中将动静一条条读出来,向指定邮件地点发送邮件。消耗者在发送动静的过程当中因为各种缘故原由会招致失利,好比收集超时、以后邮件服务器不成用等。如许我们就但愿创建一种机制,关于未发送乐成的邮件再从头发送,也就是从头处置。从头处置凌驾必定次数还不乐成,就保持对该动静的处置,纪录上去,持续对残剩动静举行处置。ActiveMQ为我们完成了这一功效,叫做ReDelivery(从头送达)。当消耗者在处置动静时有非常产生,会将动静从头放回Queue里,举行下一次处置。当凌驾重试次数时,动静会被安排到一个特别的Queue中,即DeadLetterQueue,简称DLQ,用于举行后续剖析。
空话未几说,一同来完成吧。(该示例中的全体代码已安排到GitHub上,请自行下载。)
仍是接着本系列中的示例代码来举行。要完成ReDelivery功效,要给LinsterContainer加上事件处置。设置SimpleMessageListenerContainer的sessionTransacted属性为true。
activeMQConnection.xml123456789<!--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.xml1<amq:redeliveryPolicyid="activeMQRedeliveryPolicy"destination="#defaultDestination"redeliveryDelay="100"maximumRedeliveries="4"/>
这里设置ReDelivery的工夫距离是100毫秒,最年夜重发次数是4次。
在ActiveMQ的ConnectionFactory中使用这个Policy。就是给ConnectionFactory设置属性redeliveryPolicy为我们方才创立的Policy。
activeMQConnection.xml123456<!--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.xml123456789101112131415161718<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会更好。以上都是俺个人看法,欢迎大家一起交流. 有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想) Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。 Java是一种计算机编程语言,拥有跨平台、面向对java 是一种简化的C++语言 是一种安全的语言,具有阻绝计算机病毒传输的功能 那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧! Java是一种计算机编程语言,拥有跨平台、面向对java 在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。 一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。 是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言 Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。 所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。
页:
[1]