|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
通过视频学习比传统的大课堂学习更适合成人化的学习规律。有人说大课堂气氛好,学习氛围浓,热闹,可以认识很多人。
前段工夫,有同事跟我说客户何处有良多形态为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我觉得最应该避免的就是:只学习,不思考,只记忆,不实践! |
|