关于jms的问题,希望大家进来讨论

zhaoyongzhu 2003-10-14 03:44:57
学习总结:
JMS(java Message Server)java消息服务。
分为两种消息机制:
(1)Publish/Subscriber发布/订阅,体现在Topic上,通俗的讲即为广播方式,只要对某个Topic进行listener那么这个Topic上的所有消息你都可以收到,无论是不是你发的或跟你有没有关系。但是如果你没有开listener,那么就收不到任何的消息,而且你只能收到你开listener后发到该Topic上的消息。如果想接收所有你没有收到(包括在没有开listener时的消息)的消息可以使用persistent(持久性)(即使server被重新启动过仍然可以收到),weblogic是通过Store来实现persistent,最简单的方式是建一个FileStore然后设置Topic的ConnectionFactory的ClientID,连接代码在TopicReceive.java中有。MDB(Message Driver Bean)可以作为EJB发布在weblogic上对请求的消息进行相应的处理,然后把处理的结果Publisher
(2)Point/Point点对点,体现在Queue。与上面方式主要区别在这种方式自动实现persistent,即你的listener不用在发出消息前开着也可以收到消息;另一个区别在于它不是广播式的而是一对一的,即多个同时对一个Queue进行监听的listener只有其中的一个可以收到消息,至于那一个没有规则,可能是按照他们listener的顺序,第一个listener的先收到第一个消息,下一个消息就被第二个listener收到,以此循环。最大的疑问《如果两个listener联到同一个Queue上,如果Queue有消息向外广播那么只能有一个listener收到该消息。由此产生问题,当1向Queue发送一个消息后,Queue将处理结果广播出来,而这时恰巧2开始listener这个Queue了,就有可能1无法收到结果消息,而被2接收去了》




最想不通的地方:
我觉得在消息机制中,无论是那种方式都无法实现只接收我自己发出消息的处理结果?????
下面有两种解决方案,我觉得都有不妥之处:
1、使用p/p机制。不妥之处在上面的总结中已经提出疑问了。
2、在listener中进行判断,对自己发出请求在处理结果中用特出的标志标记。这种方法确实可以解决上面的问题,但也太笨了吧!!!!



附注:
本人并没有用jms做过什么项目,只是将来的项目可能会用到所以最近学习了一下,把学习总结和疑问贴出来,希望大家讨论。

...全文
83 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhaoyongzhu 2003-11-03
  • 打赏
  • 举报
回复
up
huangry 2003-10-14
  • 打赏
  • 举报
回复
学习
lzl123 2003-10-14
  • 打赏
  • 举报
回复
"在listener中进行判断,对自己发出请求在处理结果中用特出的标志标记。这种方法确实可以解决上面的问题,但也太笨了吧!!!!"----很笨么?MasteringEJB2里面就建议这么做,另外一个办法是为listener配置一个filter,可以把不需要的消息过滤掉,这样就不用麻烦listener代码了

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧