MQ是怎么存放消息的[windows平台]

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/liushaoyi0704/article/details/5736969

今天突然想看看MQ到底是怎么存放消息的,首先想到的是存放在数据库中,我在安装开发环境时创建了一个DB2的数据库实例BRKDB1,数据库用户是db2admin,

于是我就在BRKDB1中查看db2admin用户下所有的表,但是既没有看见队列中的消息,也没有看见队列信息。

接下来我就去注册表中寻找,但是在IBM键下只找到了代理名BROKER1、队列管理器的名称BROKER1_QUEUE_MANAGER以及系统默认创建的那些*SYSTEM*队列,并没有找到我在开发过程中自己创建的队列。

那么只有可能是存放在磁盘文件中了,果然在C:/Program Files/IBM/WebSphere MQ/Qmgrs/BROKER1_QUEUE_MANAGER/queues目录下看到了所有的队列,每个队列目录下还有个Q文件,看来每个队列的Q文件就是用于存放该队列中的消息的。这时就体现出持久性和非持久性的区别了,非持久性队列中的消息是不会写入这个Q文件的,里面的消息会一直存放在缓存中,所以MQ重启后,非持久性队列中的所有消息都会丢失。 只有持久性队列中的消息才会写入Q文件中,但是并不是马上写入,开始时也是存在缓存中,过一会时间才会写入Q文件,如果MQ重启的话,会在重启之前把消息都写入Q文件。

但是队列的持久属性是可以改变的,要是某个队列原本是持久性的,后来又改成了非持久性,原来保存的消息在重启MQ后会不会丢失呢?答案是不会丢失。

------------------------------------------------------------------------------------------ 

别名队列:别名队列有一个属性是基本队列,别名队列可以看做一个指向基本队列的指针。比如有个别名队列ZL.QM.LOG.BK,它的基本队列是ZL.QM.LOG,那么在ZL.QM.LOG.BK上读写消息实际上就是对ZL.QM.LOG读写消息。别名队列下面也一样有个Q文件,不过这个文件是不会存放消息的。但是别名队列和基本队列都可以指定是否是持久性,如果他们有一个是持久性的而另一个不是的话会怎么样?

(1)别名队列持久性,基本队列非持久性:只要是放入这个别名队列的消息,都会保存在相应基本队列的Q文件中,而直接放入基本队列的消息不会保存在Q文件中,也就是说MQ重启之后,直接放入基本队列的消息会丢失,但是通过别名队列放入的消息不会丢失。

(2)别名队列非持久性,基本队列持久性:放入这个别名队列的消息,不会保存到Q文件中,而直接放入基本队列的消息会保存在Q文件中,也就是说MQ重启之后,直接放入基本队列的消息不会丢失,但是通过别名队列放入的消息会丢失。

展开阅读全文

MQ消息问题?

12-05

MQJE001: 完成代码为“2”,原因为“2195”。rncom.ibm.mq.MQException: MQJE001: 完成代码为“2”,原因为“2195”。rn at com.ibm.mq.MQDestination.getInt(MQDestination.java:650)rn at com.ibm.mq.MQDestination.get(MQDestination.java:445)rn at com.ibm.mq.MQDestination.get(MQDestination.java:401)rn at org.dnrt.MQSample.receiveMsg(MQSample.java:117)rn at org.dnrt.MQSample.main(MQSample.java:237)rnCaused by: com.ibm.mq.jmqi.JmqiException: CC=2;RC=2195rn at com.ibm.mq.jmqi.remote.internal.RemoteFAP.MQGET(RemoteFAP.java:6057)rn at com.ibm.mq.jmqi.remote.internal.RemoteFAP.jmqiGetMessage(RemoteFAP.java:4665)rn at com.ibm.mq.jmqi.internal.JmqiTools.getMessage(JmqiTools.java:1010)rn at com.ibm.mq.jmqi.remote.internal.RemoteFAP.jmqiGet(RemoteFAP.java:4601)rn at com.ibm.mq.MQDestination.internalGetMessage(MQDestination.java:1016)rn at com.ibm.mq.MQDestination.getInt(MQDestination.java:606)rn ... 4 morernMQJE001: 完成代码为“2”,原因为“2195”。rncom.ibm.mq.MQException: MQJE001: 完成代码为“2”,原因为“2195”。rn at com.ibm.mq.MQManagedObject.close(MQManagedObject.java:401)rn at com.ibm.mq.MQQueue.close(MQQueue.java:968)rn at org.dnrt.MQSample.receiveMsg(MQSample.java:140)rn at org.dnrt.MQSample.main(MQSample.java:237)rnCaused by: com.ibm.mq.jmqi.JmqiException: CC=2;RC=2195rn at com.ibm.mq.jmqi.remote.internal.RemoteFAP.MQCLOSE(RemoteFAP.java:5118)rn at com.ibm.mq.MQSESSION.MQCLOSE(MQSESSION.java:804)rn at com.ibm.mq.MQManagedObject.close(MQManagedObject.java:397)rnrnrn事件日志报错如下:rn[color=#FF0000]说明:rn从 localhost (127.0.0.1) 通过TCP/IP接收数据时发生错误。其原因可能是通信故障。rn操作:rnTCP/IP (recv)调用的返回码是10054 (X'2746')。记录这些值并通知系统管理员。 rn----- amqccita.c : 3336 -------------------------------------------------------rn2008-12-5 14:12:35 - Process(6064.9) User(MUSR_MQADMIN) Program(amqrmppa.exe)rnAMQ9999: 通道程序异常终止。rn[/color]rnrnrn现在是发消息可以发送,取消息不行。谁可以告诉我是什么原因啊? 论坛

[MQ 6.0 救急]MQ 收不到消息

04-17

问题大概是这样的,我们现在在做一个系统的升级,就是从websphere5 升级到websphere7, MQ 是以前在websphere5 上面能够正常运行的,唯一的差别就是在websphere5上的MQ通道(channel)的设置的设置为空,但是在websphere7里面,必须添加channel信息,要不在连接MQ server的时候会报错,因此我们添加了一个server connection类型的channel,我们的程序设置接收消息的时间为30秒,但是现在不知道为什么,接收队列总是收不到消息,错误消息如下:rnrnrn[][18:26:41:290] 61607dda TDR.BSV SecuritiesValidationTransporterImpl.saveSentMessage() AbstractJmsQueueTransporterImpl Save sent message: rn JMSMessage class: jms_text rn JMSType: null rn JMSDeliveryMode: 2 rn JMSExpiration: 0 rn JMSPriority: 4 rn JMSMessageID: ID:414d5120514d47525f5452414445525f4eba714f201f860a rn JMSTimestamp: 1334334401287 rn JMSCorrelationID: ID:343535380000000000000000000000000000000000000000 rn JMSDestination: queue:///TDR.OLY.A0001.SCQ.XML.SIT?readAheadAllowed=1&putAsyncAllowed=1&targetClient=1 rn JMSReplyTo: null rn JMSRedelivered: false rn JMSXAppID: WebSphere MQ Client for Java rn JMSXDeliveryCount: 0 rn JMSXUserID: wifomc81 rn JMS_IBM_PutApplType: 28 rn JMS_IBM_PutDate: 20120413 rn JMS_IBM_PutTime: 16264144 rn][18:26:41:290] 61607dda TDR.BSV SecuritiesValidationTransporterImpl.saveSentMessage() Save sent message: rn JMSMessage class: jms_text rn JMSType: null rn JMSDeliveryMode: 2 rn JMSExpiration: 0 rn JMSPriority: 4 rn JMSMessageID: ID:414d5120514d47525f5452414445525f4eba714f201f860a rn JMSTimestamp: 1334334401287 rn JMSCorrelationID: ID:343535380000000000000000000000000000000000000000 rn JMSDestination: queue:///TDR.OLY.A0001.SCQ.XML.SIT?readAheadAllowed=1&putAsyncAllowed=1&targetClient=1 rn JMSReplyTo: null rn JMSRedelivered: false rn JMSXAppID: WebSphere MQ Client for Java rn JMSXDeliveryCount: 0 rnrn[][18:26:41:290] 61607dda TDR.BSV SecuritiesValidationTransporterImpl.saveSentMessage() adpCtx outMsgId=5562 rn[][18:26:41:291] 61607dda TDR.BSV SecuritiesValidationTransporterImpl.getMessageType() actionType = 206 rn[][18:26:41:291] 61607dda TDR.BSV SecuritiesValidationTransporterImpl.getMessageType() result = SEC_NEW_SINGLE_ORDER_PRECHECKrn[< INFO>][18:26:41:309] 61607dda OBK JmsHelper.createInstance() JNDI JMS is used by Cfg! rn[][18:26:41:309] 61607dda TDR StoreMQConnection.putConnection() try to put JmsHelper8 to list rn[][18:26:41:309] 61607dda TDR StoreMQConnection.putConnection() original List size=0 rn[][18:26:41:309] 61607dda TDR StoreMQConnection.putConnection() after List size=1 rn[][18:26:41:309] 61607dda TDR StoreMQConnection.putConnection() mList[0]=JmsHelper8 rn[][18:26:41:310] 61607dda TDR.BSV SecuritiesValidationTransporterImpl.doReceiveAction() actionType= 206 rn[][18:26:41:310] 61607dda TDR.BSV SecuritiesValidationTransporterImpl.doReceiveAction() mReceiveTimeoutRealValue= 30000rn[][18:26:41:310] 61607dda TDR.BSV SecuritiesValidationTransporterImpl.doReceiveAction() getReplyMsgSelector()=JMSCorrelationID= 'ID:343535380000000000000000000000000000000000000000'rn[][18:26:41:312] 61607dda TDR.BSV SecuritiesValidationTransporterImpl.doReceiveAction() receiver.getQueue= queue:///OLY.TDR.A0002.SCP.XML.SIT?readAheadAllowed=1&putAsyncAllowed=1&targetClient=1rn[color=#FF0000][][18:26:41:313] 61607dda TDR.BSV SecuritiesValidationTransporterImpl.processReplyMessage() msg='null' rn[][18:26:41:313] 61607dda TDR.BSV SecuritiesValidationTransporterImpl.doReceiveAction() receivedObj=null [/color]rn[< INFO>][18:26:41:313] 61607dda TDR.BSV SecuritiesValidationTransporterImpl.doReceiveAction() throw ReceiveTimeoutException getSelectedMsgID()=ID:343535380000000000000000000000000000000000000000rn[][18:26:41:313] 61607dda TDR.BSV SecuritiesValidationTransporterImpl.doReceiveAction() throw ReceiveTimeoutException=throw ReceiveTimeoutException getSelectedMsgID()=ID:343535380000000000000000000000000000000000000000(messageCode=COM000312)rn[][18:26:41:315] 61607dda TDR StoreMQConnection.removeConnection() try to remove JmsHelper8 from list rn[][18:26:41:315] 61607dda TDR StoreMQConnection.removeConnection() original List size=1 rn[][18:26:41:315] 61607dda TDR StoreMQConnection.removeConnection() mList[0]=JmsHelper8 rn[][18:26:41:315] 61607dda TDR StoreMQConnection.removeConnection() List already contain JmsHelper8 rn[][18:26:41:315] 61607dda TDR StoreMQConnection.removeConnection() after List size=0 rn[][18:26:41:315] 61607dda TDR StoreMQConnection.removeConnection() try to remove JmsHelper from list rnrnrn这个问题已经拖延很久没有解决了,本来这个项目一直都做得很好,客户评价很高,由于这个问题,客户都投诉了,有没有高手帮忙解决啊,小女子跪谢了。 论坛

没有更多推荐了,返回首页