MQ是怎么存放消息的[windows平台]
2010-07-15 13:58
267 查看
今天突然想看看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重启之后,直接放入基本队列的消息不会丢失,但是通过别名队列放入的消息会丢失。
于是我就在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重启之后,直接放入基本队列的消息不会丢失,但是通过别名队列放入的消息会丢失。
相关文章推荐
- windows平台下,采用kafka作为消息中间件,consumer和producer采用java api (环境搭建)
- 使用DOClever接口管理平台,使用免费开源版本线下(windows环境)该怎么安装部署?
- WM_DROPFILES消息怎么用?一个界面上怎么让多个组件同时支持windows外部文件拖拽。DragAcceptFiles。
- 怎么查看端口占用情况(windows平台)?
- 【翻译自mos文章】在windows平台上怎么启用Oracle database 企业版的partition?
- windows平台消息处理函数(C版)
- 求助:windows平台下怎么正确编译及使用faac源代码
- windows平台消息处理函数(C++版)
- [置顶] 分析器错误消息: 此实现不是 Windows 平台 FIPS 验证的加密算法的一部分
- 分析器错误消息: 此实现不是 Windows 平台 FIPS 验证的加密算法的一部分
- Windows消息队列MQ的使用
- MQ怎么保证消息的稳定性和完整性?
- 微信公众平台回复过了怎么不能再次回复?亲们要注意查看"公众平台回复用户消息时限变更通知"的公告啊
- windows平台下的消息组成
- 怎么让一个非窗口组件可以接受来自Windows的消息
- 任信了:106短信平台群发消息是怎么收费的?
- 教你怎么把windows平台的东西复制到linux下
- Windows平台dump文件的产生,调试;工程配置pdb文件怎么生成
- mq的链接 消息读取与存放