Huihoo.org - Open Source Middleware Foundation

 Last Modified: 2003.02.24

JMS规范与实现,JMS消息中间件


(by huihoo.org Allen整理)

注:orbat为JFox项目组的核心成员,founder_chen是JFoxMQ负责人,并负责JFox CVS管理,mepp是orbas项目负责人

讨论总结:

。传递消息中的事务处理,选用DB或File依据可靠性的要求
。OpenJMS大家讨论最多,应加强对它的研究和应用
。确定3月内完成JMS框架和核心代码的编写
。dfdfswsw作为项目组新成员,为大家带来很多新信息、新思路,期待更多参与JFox项目的讨论、开发
下周一讨论议题:JMX规范与实现,以及基于JMX的网络管理

allen_long对大家说: JFox-JMS:仅仅是JMS规范的实现(10:04)

allen_long对大家说: JFoxMQ:包含JMS规范实现的完整消息中间件(10:05)

allen_long对大家说: JFox-JMS由orbat负责实现(10:05)

founder_chen对大家说: orbat你现在看jms到什么程度了?(10:05)

allen_long对大家说: JFoxMQ由founder_chen负责实现(10:05)

orbat对founder_chen说: 规范差不多了,然后结合一些实现看代码(10:06)

dfdfswsw对大家说: 对不起..迟到了(粟伟)(10:06)

founder_chen对大家说: 有什么计划(10:06)

orbat对founder_chen说: 计划是在这个月能把 jms 设计出来,然后把框架和核心的代码写好(10:07)

orbat对founder_chen说: 哦,不是,是在 3 月份内(10:08)

founder_chen对大家说: orbat, 我去年实现了一部分,对destination的存储有些疑问(10:09)

orbat对founder_chen说: 可以看看其它的实现是怎么解决的? 谁有可以反编译的 sonicmq(10:10)

founder_chen对大家说: 提供大家参看的JMS源码有openjms, joram, sun j2ee1.3 RI, jboss-mq(10:10)

orbat对founder_chen说: 还有 swiftmq ,也值得看看,不过需要反编译(10:11)

founder_chen对大家说: 商业产品反编译后不一定完全(10:11)

orbat对founder_chen说: 关键还是看它的设计思想(10:12)

founder_chen对大家说: softwire的iBus也是一个不错的产品,SUN 在去年对中国联通构建移动娱乐平台的一个项目中选择了它(10:13)

founder_chen对大家说: 对于实现动态队列的添加,你有什么想法(10:13)

founder_chen对大家说: hello , mepp(10:14)

mepp对大家说: hello:)(10:14)

orbat对mepp说: hi,mep(10:15)

dfdfswsw对allen_long说: 大家还不认识我 需要做一个介绍吗?(10:15)

mepp对大家说: hi,orbat(10:15)

orbat对founder_chen说: 动态队列,关键就是一个锁的问题吧(10:15)

founder_chen对大家说: orbat, 我这个月可能不出差了,我们可以讨论一下jms api实现的详细设计(10:15)

allen_long对大家说: 好的,大家可以介绍一下自己(10:16)

founder_chen对大家说: okay(10:16)

allen_long对大家说: 我,Allen,一个灰狐人,主要是组织、协调大家的一些具体工作(10:16)

dfdfswsw对大家说: 大家好。。 我是才加入huihoo的(10:16)

founder_chen对大家说: founder_chen, 原link3项目负责人,现在归并到JFox下,主要协助开发JFoxMQ, JFox-mq,并协助allen进行项目管理(10:17)

dfdfswsw对大家说: 我以前是自己设计一些 小型app sever 的 目前使用openjms 做我的jms 核心(10:17)

orbat对founder_chen说: 嗯,好的(10:18)

dfdfswsw对大家说: 粟伟 重庆人 qq 1167374 msn suwei_m@hotmail.com(10:18)

mepp对大家说: hi,dfdfswsw,我是orbas项目组的(10:18)

allen_long对dfdfswsw说: 你的App Server有地方下载吗?(10:18)

allen_long对大家说: mepp是huihoo的CORBA专家,负责orbas的设计、开发(10:19)

founder_chen对大家说: orbat,原来link3的源码和文档你手上有吗(10:19)

dfdfswsw对大家说: 这样 我明天把设计书和成品 都放在www.zdage.com 上(10:20)

orbat对founder_chen说: 文档我好像有(10:20)

founder_chen对大家说: wo, my msn, founder_chen@hotmail.com(10:20)

orbat对founder_chen说: 据你的经验,你觉得在开发(10:21)

dfdfswsw对大家说: 现在我在外面的 。。 我使用visibroker /jacorb /openorb 做我的corba orb(10:21)

founder_chen对大家说: thank U , dfdfswsw(10:21)

orbat对founder_chen说: JMS 的时候,难点在什么地方?(10:21)

allen_long对大家说: orbat是J2EE的高手,现在负责JFox的核心部件的开发。founder_chen负责JFoxMQ消息中间的开发(10:21)

allen_long对dfdfswsw说: 谢谢(10:21)

dfdfswsw对大家说: orbat 你好.... 见过你的照片 厉害(10:22)

founder_chen对大家说: 我觉得在对消息队列的管理(10:23)

orbat对dfdfswsw说: 过奖了(10:23)

founder_chen对大家说: 消息的可靠性恢复(10:23)

allen_long对大家说: 那我们接着刚才的话题讲(10:24)

founder_chen对大家说: orbat, 对于消息中间件,速度与可靠性是两个很难平横的问题(10:25)

orbat对founder_chen说: 是啊,做一个 jms 实现并不难,但是做一个好的 jms 实现就很难(10:25)

orbat对founder_chen说: 那关于消息队列,你手上有资料或者代码吗?(10:26)

allen_long对大家说: 可靠的一个关键:消息队列(10:26)

mepp对大家说: 可靠的JMS的实现都是结合了数据库进行持久化,并结合了事务的(10:27)

mepp对大家说: 对这几点大家有什么看法?(10:27)

founder_chen对大家说: 我们这以前做现在的CMCC的短信网关的时候,对消息采用的是数据库存储,发现速度很慢,现在用内存队列,同时使用文件到内存队列的镜像(10:27)

orbat对founder_chen说: 持久化问题,我觉得可以考虑以本地文件为主(10:28)

mepp对大家说: 如果应用对可靠性要求很高,就使用持久存储,否则可以仅仅使用内存队列(10:29)

founder_chen对大家说: JMS中消息队列本身就是一个很简单的FIFO(10:29)

orbat对founder_chen说: 还得考虑优先级的问题哦(10:30)

founder_chen对大家说: yea, 所以我想是否采用mem to local file mapping(10:30)

dfdfswsw对大家说: 使用内存链表之类的东西做本地cache如何?(10:30)

mepp对大家说: 如果采用本地文件,如何结合distributed transaction?(10:31)

founder_chen对大家说: JMS的QoS在消息体的定义中就有支持(10:31)

founder_chen对大家说: 包括优先级(10:31)

mepp对大家说: dfdfswsw的想法法不错,原来huihoo下载的sunone科技日中的资料中就有distributed cache用来提高数据库的访问效率,不过这应该超出了JMS的范围了(10:32)

founder_chen对大家说: distributed transaction,是的,头痛的问题,看大多数JMS对于persistence的实现还是才用的db(10:33)

allen_long对cmy007说: welcome(10:33)

cmy007对大家说: hi(10:34)

founder_chen对大家说: orbat你对现在JMS中提出的domain有什么理解,很多computing模型中都有提到这个(10:34)

dfdfswsw对大家说: 我自己参考了一个类似joint 的里面有dtp处理(10:34)

founder_chen对大家说: hi, cmy007(10:35)

dfdfswsw对大家说: 在opengroup 里面也是x/open 的DTP实现模式(10:35)

founder_chen对大家说: mepp, corba中的分布式事务是怎么处理的(10:35)

mepp对大家说: JMS结合JTA需要将JMS访问数据库的JDBC和JTS关联起来(10:35)

orbat对大家说: 看他的规范,它的domain 指的就是 PTP P/S(10:35)

cmy007对allen_long说: 你好。我是JMS的新手!原来没怎么了解它。(10:36)

mepp对大家说: CORBA中是将访问数据库的对象注册到OTS中,这样的话OTS就会将这个对象加入2PC(10:36)

dfdfswsw对大家说: 我觉得哪个 链表不是直接和数据库相关系 而是一个高效的file to mem mem to file(10:36)

orbat对dfdfswsw说: 你说的“内存链表”,能否详细谈谈?(10:36)

founder_chen对大家说: dfdfswsw, opengroup在什么地方,能否给出它的address, URL(10:37)

cmy007对allen_long说: 按照我的了解,JMS在只是定义了一套Java程序访问消息系统的接口。(10:37)

dfdfswsw对大家说: 这个理论是从 一本 java 数据库结构 看到的 具体在jive中有使用(10:37)

founder_chen对大家说: cmy007,yea(10:37)

dfdfswsw对大家说: www.opengroup.org(10:37)

cmy007对allen_long说: 实际的是在JMS下应该有个消息系统。(10:38)

founder_chen对大家说: thank U , dfdfswsw(10:38)

cmy007对allen_long说: 如(10:38)

cmy007对allen_long说: 如IBM的MQSeries。(10:38)

cmy007对allen_long说: 不知我说的对不对(10:39)

cmy007对founder_chen说: 你好!(10:39)

founder_chen对大家说: dfdfswsw, 说的是不是一种memory database(10:39)

dfdfswsw对大家说: 现在几乎所有的JTA 以及相cics(没有用过) tuxedo 在处理dtp的时候都参照了 xopen DTP 实现模型(这个文档他要受费 我没有)(10:39)

founder_chen对大家说: cmy007, 你好,:)(10:39)

dfdfswsw对大家说: 有点象(10:39)

dfdfswsw对大家说: 主要是一链表的形式构造 需要cache的对象 包含时间戳 过期就objectstream 或者其他方式丢弃到file(10:41)

founder_chen对大家说: 但那种方式在就像mepp说得,在dt中就有问题,我想知道tuxedo等产品是否是采用mem database与database像结合的方式(10:41)

cmy007对allen_long说: 那么,JFox的JMS的目标是到哪个层次?(10:42)

founder_chen对大家说: orbat, young_yy@hotmail.com is okay?(10:43)

dfdfswsw对大家说: 但是在dt中如果按照规范 我们就应该采取TP 模式 在本地linklist,在DT中由 TM完善(10:43)

orbat对founder_chen说: ok(10:44)

cmy007对allen_long说: J2EE1.3要求AppServer需要提供一个JMS Provider。(10:44)

founder_chen对大家说: TP模式能给大家大概介绍一下吗,dfdfswsw(10:45)

dfdfswsw对大家说: 就象上次 那个 godress 中间件那样 比如DTP 事务进程本身不由jms控制(10:46)

founder_chen对大家说: cmy007, 那个JMS Provider指的就是一个JMS MQ Server 的实现商(10:46)

founder_chen对大家说: jms本身只定义了用这种方式访问消息的接口,并未定义事务是如何管理,这更具体 provider的实现方式有关(10:47)

dfdfswsw对大家说: 那种TP模式 就是以前的 使用一个transacion mointer 监控 事务进程(10:47)

founder_chen对大家说: mepp, 请问corba中的TP monitor是个什么原理(10:48)

mepp对大家说: 对,只要JDBC参与到JTS控制的事务中就可以了(10:48)

mepp对大家说: TP monitor好像是个类似于事务管理器的东东(10:49)

founder_chen对大家说: orbat, 会后你把对JMSAPI实现的一个详细一些的计划发给我一下好吗(10:51)

dfdfswsw对大家说: 我想的话 我们可以自己设计一个/一种 TP 来统一完成诸如 jfoxmq的事物,还有比如其他类似tuxedo模块的事物,jdbc的事物(10:51)

orbat对founder_chen说: 现在还没有成型呢,我们一起讨论完善它吧(10:52)

founder_chen对大家说: 好的,orbat, 那最近我们可要多多交流了,呵呵(10:53)

dfdfswsw对大家说: 因为本身那个DTP 模式 也只是一种分布式进程的抽象,只是现在主要使用到database middleware方面,就是提供XA接口(10:53)

mepp对大家说: 在JMS涉及事务的管理时,原则应该是这样:如果是客户端发起的分布式事务,则JMS不作处理,由事务发起者提交;如果没有事务上下文而又要求,JMS本身可以begin一个事务,最后又JMS来提交。(10:53)

founder_chen对大家说: dfdfswsw,JMS的API中有对XA的定义(10:54)

mepp对大家说: 如果实现了JTS,就可以替代TP了,是不是这样(10:54)

dfdfswsw对大家说: 对呀 spec 里面定义了xa接口呀(10:54)

mepp对大家说: JMS的事务管理应该和EJB的容器对事务的管理是一样的(10:54)

founder_chen对大家说: yea(10:55)

founder_chen对大家说: orbat, jfox在实现ejb container的时候对事务的处理采用的是什么方式?(10:56)

mepp对大家说: JMS是否提交事务需要判断事务上下文。这些都可以采用JTS来完成(10:56)

dfdfswsw对大家说: 我刚才说的不是说jms怎么处理事务,而是说消息队列本身 可以采用mem database /file 然后由tp 实现消息队列的DT(10:57)

orbat对founder_chen说: 本地事务(10:57)

orbat对founder_chen说: 具体的还得要 tisom 来讲才知道(10:57)

mepp对dfdfswsw说: 恩,原理是一样的(10:58)

mepp对大家说: JMS应该不用直接涉及XA接口,这些由JTA和JDBC来完成(10:59)

orbat对founder_chen说: 你有没有看过 openjms 或者其它 jms 实现在处理队列和事务时的细节?(11:00)

founder_chen对大家说: jms消息队列本身就是在mem中,我们要做一个mem到persistence的mapping管理(11:00)

founder_chen对大家说: 事务的部分还没看,队列处理正在研究, orbat(11:01)

dfdfswsw对大家说: openjms应该有几种方式吧(11:01)

founder_chen对大家说: dfdfswsw,给大家介绍一下吧(11:02)

founder_chen对大家说: 哪几种?(11:02)

mepp对大家说: 对阿,dfdfswsw说的,既兼顾了效率,又考虑了可靠性(11:02)

founder_chen对大家说: orbat, 请问tisom的email是什么?他今天怎么没来(11:04)

dfdfswsw对大家说: openjms说实话我用的比较多,但是研究的一般 我感觉openjms应该是考虑了几种方式(11:04)

dfdfswsw对大家说: 一种就是mem database方式 强调速度(11:05)

founder_chen对大家说: dfdfswsw, 你觉得openjms的效率如何,稳定性呢(11:05)

sunmike1000对大家说: hello(11:06)

orbat对founder_chen说: tai_1219@yahoo.com, 他比较忙(11:06)

founder_chen对大家说: hi, sunmike100, welcome(11:06)

dfdfswsw对大家说: openjms还可以呀(11:06)

dfdfswsw对大家说: 他的特色就是做了几种 client adpter(11:06)

dfdfswsw对大家说: rmi ,tcp ,http(11:06)

orbat对founder_chen说: 上回听有人说 openjms(11:07)

dfdfswsw对大家说: jms server效率感觉都差不太多(11:07)

founder_chen对大家说: 有没有量化的标准,比如说转发消息?条/秒 , 消息大小一定时(11:07)

orbat对dfdfswsw说: 上回听有人说 openjms 有掉包的现象,你遇见过没有?(11:07)

dfdfswsw对大家说: 但是openjms 7.3有很大的bug 队列要组塞 尤其是http(11:08)

dfdfswsw对大家说: 我只做过<1w的消息测试(11:08)

dfdfswsw对大家说: 当时我只有openjms /sonicMQ/FRONTMQ(最后一个记不的了 法国人开发的(11:09)

mepp对大家说: 如果没有流控机制,不停的发,一定会有掉包,毕竟处理过程比发送过程要长(11:09)

dfdfswsw对大家说: openjms 应该没有考虑 热主机 热路由吧 (感觉资料里面没有什么说明)(11:10)

founder_chen对大家说: 你能帮助整理一个关于openjms0.7.3这个版本的详细分析给大家吗,谢谢(11:11)

founder_chen对大家说: dfdfswsw(11:11)

dfdfswsw对大家说: 好的 我昨天才打印了jms spec openjms doc 我的墨水都用完了(11:13)

dfdfswsw对大家说: 现在openjms 是074了可能改进比较大(11:13)

founder_chen对dfdfswsw说: 呵呵(11:13)

mepp对dfdfswsw说: 现在哪几个JMS的实现比较优秀?(11:17)

orbat对mepp说: 最优秀的应该是 SonicMQ ,可惜没法反编译(11:18)

orbat对founder_chen说: 你的 msn ?(11:20)

founder_chen对dfdfswsw说: Softwired 的iBusMessagingServer也做的不错,它在对wireless message的方面比较有特色,是欧洲最优秀的消息服务器供应商(11:22)

founder_chen对dfdfswsw说: orbat, founder_chen@hotmail.com(11:22)

allen_long对founder_chen说: 希望无线功能会是我们的JFoxMQ的一大特色(11:24)

allen_long对大家说: 大家对消息的断点续传是如何考虑的?(11:26)

founder_chen对大家说: 是的,我想和大多数做得一样,就很难体现我们吸引人的一面乐(11:26)

allen_long对大家说: 还有安全性:用户认证、传输加密的考虑(11:27)

founder_chen对大家说: jms中对这种保证采用的是persistence, 当一个client由于网络等原因没收到消息时,当他下次重连上JMSServer时,JMS Server会重发一次(11:28)