Topic: 消息队列中间件中对象池技术是否适合???? |
Print this page |
1.消息队列中间件中对象池技术是否适合???? | Copy to clipboard |
Posted by: wendy_yu_2001 Posted on: 2004-02-29 18:07 我正在做一个消息队列中间件: 将接收的消息放在队列中,排队算法是WFQ; 将消息从队列中取出进行处理,处理过程是一个相当负责的过程,包括解析、解密、验证以及获得查询语句。 我想问:我设计一个对象池,池中的对象用来负责处理工作,这样合适吗? 有高手告诉我这样相当于把消息排了两次队,排队一次,应用对象池又排队一次。请问高手,这里用对象池技术好不好,效率怎样? |
2.Re:消息队列中间件中对象池技术是否适合???? [Re: wendy_yu_2001] | Copy to clipboard |
Posted by: cailuyu Posted on: 2004-02-29 22:09 我是这样想的 首先是我的假设 首先 你的中间件应该是工作在多线程下的 就是说中间件内部是通过多线程并行处理消息的 其次 从你说的"处理"的概念:"解析、解密、验证以及获得查询语句" 可以看出你说的这些 "对象"应该是无状态的 所以 大致你说的池的工作原理和无状态sb池是类似的 你说的那个高手提到的二次排队 我是这样理解的: 消息已经在队列里按一定顺序排队 然后"消息处理对象"异步的进行处理 由于是异步的 就会造成原有的顺序被打乱 这可能是他提到二次排队吧? 这个问题在应用层是有一定意义的 有些消息的处理顺序是严格的 这涉及到一个比较复杂情况和问题 一般的中间件产品都是在消息头中作一些处理 当然你的中间件如果暂时不考虑这些 也就没有问题了 |
3.Re:消息队列中间件中对象池技术是否适合???? [Re: wendy_yu_2001] | Copy to clipboard |
Posted by: wendy_yu_2001 Posted on: 2004-03-01 09:46 无状态sb池是什么? 那你的意思是可以用了? |
4.Re:消息队列中间件中对象池技术是否适合???? [Re: wendy_yu_2001] | Copy to clipboard |
Posted by: cailuyu Posted on: 2004-03-01 10:55 我的意思是 就像应用服务器中的stateless session bean的池的工作方式 如果你对信息的处理不严格要求按照队列的顺序 那就没问题 因为池的工作方式是透明的 用与不用从上层是看不出来变化的 所以不会存在什么问题 而且在存在大量短线程的情况下 性能肯定是有优势的 |
5.Re:消息队列中间件中对象池技术是否适合???? [Re: wendy_yu_2001] | Copy to clipboard |
Posted by: cailuyu Posted on: 2004-03-01 22:36 还有一种可能 这和pool的工作原理有关 池的获得对象的方法是被同步的 这样就有可能造成 二次排队 这时候排队的方式是和同步的机制有关的 不受你的控制 也就会造成处理顺序与队列中的顺序不一致 解决方法 将方法调用序列化 再排一次队 |
6.Re:消息队列中间件中对象池技术是否适合???? [Re: wendy_yu_2001] | Copy to clipboard |
Posted by: smartHawk Posted on: 2004-03-02 13:50 我也做个一个类似JMS的订阅/发布方式的处理过程消息处理过程,我觉得在做这个的时候,应该包括以下几个方面: 1.接收消息; 2.分发消息(排队)(维护消息的之间的逻辑(有状态的消息时需要)),有不同的消息类型; 3.处理消息 我想你所说的对象池是想在处理消息时使用不同的对象来处理,但是为了实现处理对象的重用所以使用对象池。 由于从池中取得消息处理对象时是一个同步的方法,所以在这儿可能需要在排队。 至于这个开销,我觉得是值得的,如果我们不对处理对象进行的个数进行控制,一旦消息大量到达,将会有大量的构造、虚拟机释放内存的过程。而且随着对象数目的增加,虚拟机效率肯定要降低的。但是这个就有一个问题:对象池的深度问题,太少,使得取对象的效率降低。太大,就没有起到对象池的本意。 希望我得解释能够对你有一些帮助。 |
7.Re:消息队列中间件中对象池技术是否适合???? [Re: smartHawk] | Copy to clipboard |
Posted by: cailuyu Posted on: 2004-03-02 21:45 smartHawk wrote: 这个想法和我的一样 你觉得应该怎么排队哪? 只在获得处理对象的时候保证顺序和队列中的一致是否有意义? 我觉得如果要保证消息真正的按顺序处理 那么多线程也就没意义了 同步异步也就没意义了 池也就没意义了 不过我觉得 我好像理解错了楼主的意思 楼主好像是问池造成的二次排队对性能的影响 这个问题好办呀 池本身是透明的 那你在设计的时候用工厂做封装 然后设置开关 这样将来也方便做测试 是否有性能的优势 是和场合相关的 没有什么绝对的 |
Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1 客服电话 18559299278 客服信箱 714923@qq.com 客服QQ 714923 |