了解下JAVA的关于JMS Message Pending的成绩
通过视频学习比传统的大课堂学习更适合成人化的学习规律。有人说大课堂气氛好,学习氛围浓,热闹,可以认识很多人。前段工夫,有同事跟我说客户何处有良多形态为receive的message,这些message只要在JMSServer或weblogicServer充启以后才干被消耗。经由查询拜访后,这个成绩多是weblogic的一个bug,固然也不扫除跟详细情况有关的大概。上面我们来看看成绩的基本缘故原由是甚么,这类剖析有助我们更进一步了解weblogicJMS的完成。
起首我们看一下甚么是receive,receive暗示一个message已被consumer消耗,但服务端还没有关于这个message的ack,以是动静不克不及从queue中删除, 因为queue中的动静是point-2-point的,以是某个消息被标为receive后,这个动静天然不克不及被其他consumer消耗。那末这个ack由谁卖力发送给Server呢,什么时分发送呢?这些都由我们创立JMSSession时利用的Ack_mode决意,典范的ack-mode有以下两种:
auto-ack:主动呼应形式,consumer.receive()挪用后,假如服务器端发明有可用的message,动静返回到客户端JMS完成层,在动静前往给客户前,由weblogicclient(JMSSession.getAsyncMessageForConsumer(),异步承受,好比MessageListener,或JMSSession.receiveMessage(),同步承受)层完成间接挪用acknowledge()关照服务器端,服务器端收到ack后,它会卖力卖力将处于receive的message从物理queue中删除。
client-ack:客户呼应形式,consumer.receive()挪用后,客户端收到动静后,客户端程序决意甚么时分发送ack,能够在动静后当即发送,也能够在动静处置乐成后发送,ack的发送经由过程message.acknowledge()完成。前面的历程和auto-ack不异。
初看这个成绩,感到是ack没有收到,那末甚么情形下会呈现ack丧失呢?收集成绩? 那末客户端或服务器真个serverlog应当可以看到非常,客户保持说没有任何非常。有点难以想象,要了客户的代码,他们没有代码,实践上他们的使用是基于SpringFramework的,经由过程复杂的设置来完成他们的营业必要,看了下Spring的相干代码,客户之以是说没有非常,由于Springcatch了服务器端前往的JMSException,并吃失落了这个非常(即非常没有打印出来),这个非常输入是能够经由过程Spring的设置来完成。客户设置后,给了我详细的非常,以下:
<p>
而学习JAVA我觉得最应该避免的就是:只学习,不思考,只记忆,不实践! 还好,SUN提供了Javabean可以把你的JSP中的 Java代码封装起来,便于调用也便于重用。 不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。 Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。 Java是一种计算机编程语言,拥有跨平台、面向对java 你一定会高兴地说,哈哈,原来成为Java高手就这么简单啊!记得Tomjava也曾碰到过一个项目经理,号称Java很简单,只要三个月就可以学会。 所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。 你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢? 当然你也可以参加一些开源项目,一方面可以提高自己,另一方面也是为中国软件事业做贡献嘛!开发者在互联网上用CVS合作开发,用QQ,MSN,E-mail讨论联系,天南海北的程序员分散在各地却同时开发同一个软件,是不是很有意思呢?
页:
[1]