- 浏览: 35134 次
- 性别:
- 来自: 北京
最新评论
WLS_042:常见故障之十:JMS Queue中的消息被“重复消费”问题
- 博客分类:
- WEBLOGIC
声明:该博文转自http://maping930883.blogspot.com,热爱java,热爱生活
正常情况下,Sender把消息发送到Queue以后,Receiver成功读取之后,Queue中的消息应该不存在了。
但有时,我们会发现消息依然在Queue中存在,这是怎么回事呢?
既然Sender已经把消息发送到Queue中了,表明事务已经成功完成了。因此,问题应该出现在Receiver代码中。
在Receiver代码中,我们重点看init()和onMessage()方法:
1.init()
public void init(Context ctx, String queueName)
throws NamingException, JMSException
{
qconFactory = (QueueConnectionFactory) ctx.lookup(JMS_FACTORY);
qcon = qconFactory.createQueueConnection();
qsession = qcon.createQueueSession(false, Session.CLIENT_ACKNOWLEDGE);
queue = (Queue) ctx.lookup(queueName);
qreceiver = qsession.createReceiver(queue);
qreceiver.setMessageListener(this);
qcon.start();
}
注意创建Session时使用的参数是Session.CLIENT_ACKNOWLEDGE,这说明需要明确告诉JMS消息是否接收成功,否则Queue中的消息将一直存在。
2.onMessage()
成功获取消息后,增加语句msg.acknowledge();,表明消息是否接收成功,事务成功完成。
public void onMessage(Message msg)
{
try {
String msgText;
if (msg instanceof TextMessage) {
msgText = ((TextMessage)msg).getText();
} else {
msgText = msg.toString();
}
msg.acknowledge();
} catch (JMSException jmse) {
jmse.printStackTrace();
}
}
3. 如果创建Session时使用的参数是Session.AUTO_ACKNOWLEDGE
该参数的意义是只要onMessage方法成功返回(没有抛出异常),就认为消息成功收到了。此时,不需要在onMessage方法中增加语句msg.acknowledge();。
正常情况下,Sender把消息发送到Queue以后,Receiver成功读取之后,Queue中的消息应该不存在了。
但有时,我们会发现消息依然在Queue中存在,这是怎么回事呢?
既然Sender已经把消息发送到Queue中了,表明事务已经成功完成了。因此,问题应该出现在Receiver代码中。
在Receiver代码中,我们重点看init()和onMessage()方法:
1.init()
public void init(Context ctx, String queueName)
throws NamingException, JMSException
{
qconFactory = (QueueConnectionFactory) ctx.lookup(JMS_FACTORY);
qcon = qconFactory.createQueueConnection();
qsession = qcon.createQueueSession(false, Session.CLIENT_ACKNOWLEDGE);
queue = (Queue) ctx.lookup(queueName);
qreceiver = qsession.createReceiver(queue);
qreceiver.setMessageListener(this);
qcon.start();
}
注意创建Session时使用的参数是Session.CLIENT_ACKNOWLEDGE,这说明需要明确告诉JMS消息是否接收成功,否则Queue中的消息将一直存在。
2.onMessage()
成功获取消息后,增加语句msg.acknowledge();,表明消息是否接收成功,事务成功完成。
public void onMessage(Message msg)
{
try {
String msgText;
if (msg instanceof TextMessage) {
msgText = ((TextMessage)msg).getText();
} else {
msgText = msg.toString();
}
msg.acknowledge();
} catch (JMSException jmse) {
jmse.printStackTrace();
}
}
3. 如果创建Session时使用的参数是Session.AUTO_ACKNOWLEDGE
该参数的意义是只要onMessage方法成功返回(没有抛出异常),就认为消息成功收到了。此时,不需要在onMessage方法中增加语句msg.acknowledge();。
发表评论
-
WLS_046:常见故障之十四:Proxy Plug-in 问题
2013-02-25 14:00 749声明:该博文转自http://maping930883.blo ... -
WLS_040:常见故障之八:JDBC Connection Pools
2013-02-25 13:56 1284声明:该博文转自http://maping930883.blo ... -
WLS_038:常见故障之六:Too many open files
2013-02-25 13:53 1054声明:该博文转自http://maping930883.blo ... -
常见故障之五:Out of Memory
2013-02-22 16:19 708声明:该博文转自http://maping930883.blo ... -
WLS_036:常见故障之四:Stack Overflow Error
2013-02-22 16:16 1061声明:该博文转自http://maping930883.blo ... -
WLS_035:常见故障之三:Server Hang
2013-02-22 16:14 804声明:该博文转自http:// ... -
WLS_034:常见故障之二:Server Crash后找不到Core Dump文件
2013-02-22 16:11 1002声明:该博文转自http://maping930883.blo ... -
WLS_033:常见故障之一:Server Crash
2013-02-22 16:10 878声明:该博文转自http:// ... -
WebLogic Server高级管理之五:集群下的Data Source配置
2012-07-31 21:59 1102声明:该博文转自http:// ... -
WebLogic Server高级管理之四:为集群配置Apache代理
2012-07-31 21:55 978. 声明:该博文转自http://maping930883.b ... -
WebLogic Server高级管理之三:集群下的HTTP Session管理
2012-07-31 21:52 1481声明:该博文转自http:// ... -
WebLogic Server高级管理之二:为集群配置ProxyServer
2012-07-31 21:47 1410声明:该博文转自http://maping930883.blo ... -
WebLogic Server高级管理之二:为集群配置ProxyServer
2012-07-22 21:04 0声明:该博文转自热爱生活,热爱JAVA。原文地址为http:/ ... -
WebLogic Server高级管理之一:配置集群
2012-07-22 21:01 1008首先声明:该博文转自 ... -
WebLogic Server高级管理之六:集群下的JMS配置
2012-07-22 20:57 1192首先声明,该博文转自热爱生活,热爱JAVA,原文地址为http ... -
WebLogic Server高级管理之八:JMS 存储与转发
2012-07-22 20:37 1057提醒:weblogic系列博客均转载自千红一酷的博客,原地址为 ... -
WebLogic Server高级管理之七:JMS Topic 持久化订阅
2012-07-22 20:04 998运行环境:WebLogic Server 12.1.1 开发版 ...
相关推荐
对于Live,请从以下区分大小写的选项中进行选择:ALL =域中的所有JVM NODE_ALL =每台计算机上的域中的所有JVM L1 =每台计算机上的域中的Lane 1 JVMS L2 =每台计算机上的域中的Lane 2 JVMS 指定sudo用户和组。 前...
此包是本人在修补weblogic漏洞时,http://sn.cloud.ccb.com/bea_wls_internal/classes/META-INF/MANIFEST.MF漏洞实在没办法,试遍网上所有方法,在被逼无奈之下,花了两周研究出来的,就不要想在其他地方找到了,...
fmw_14.1.1.0.0_wls_lite_generic.jar 百度网盘下载地址在TXT文件内
fmw_12.2.1.4.0_wls_Disk1_1of1.zip,百度网盘下载地址在TXT文件内
mac版本weblogic安装包
fmw_12.2.1.2.0_wls_Disk.zip
fmw_12.2.1.4.0_wls_lite_Disk1_1of1.zip weblogic12c,官网下载太慢,有需要可取
WLS计算,加权最小二乘法计算,含代码。
包括:Java EE 7,Weblogic Server和Oracle Coherence(加快速度的缓存管理部件)。
WebLogic是美商Oracle的主要产品之一,是并购BEA得来。是商业市场上主要的Java(J2EE)应用服务器软件(application server)之一,是世界上第一个成功商业化的J2EE应用服务器, 已推出到12c(12.2.1.4) 版。而此产品...
室内无线定位技术,基于最小二乘法的matlab仿真程序
Edge-Preserving Decompositions for Multi-Scale Tone and Detail Manipulation,wls filter,WLS filter code
wls1213_dev_update3.zip weblogic安装包 大家也可以去这里下载wls1213_dev_update3.zip wls1213_dev_update3.zip wls1213_dev_update3.zip
Wls_weblogic管理监控.doc
wls1213_dev.zip
wls12c (12.2.1.4.0)2022年4月19日发布的最新累积补丁集 12.2.1.4.0.PNG p28186730_139428_Generic.zip p31544353_122140_Linux-x86-64.zip p31544353_122140_MSWIN-x86-64.zip p32720458_122140_Generic.zip p...
Weblogic Server 11gR1,版本号是...在命令行,进入安装文件wls1036_generic.jar所在文件夹 然后输入命令: Java -jar wls1036_generic.jar ,点击回车后程序会启动weblogic安装文件的图形安装界面,若有问题请留言
wls1036_generic.jar是weblogic10.3.6解压后的jar包,在安装目录下执行即可安装weblogic11g
Edge-Preserving Decompositions for Multi-Scale Tone and Detail Manipulation (ACM TOG 2008)
oracle ocm 11g的考试需要10.3.2的weblogic,特提供资源