楼上可能误会了,我描述一下有问题的结果:比如现在队列TEST1里有100条消息,接进来一个Socket作为TEST1的Receiver,并且它发送了50个接收消息的请求,然后就断开了。接着,又接进来一个Socket作为TEST1的Receiver,并且也发送50个接收消息的请求,但是,第二个Socket将只能接收到小于50条的消息。这是因为,在第一个socket收玩50条消息,和该socket断开之间这段时间,那个“检测队列长度并发送消息的线程”又把一些消息写进它的InputStream里,并且从队列中删除了,所以会造成消息丢失。当然了,如果Receiver一直监听队列的话是没有这个问题的,楼上的再帮忙想想:)

解决方案 »

  1.   

    为什么不用jms,我想应该可以满足楼主的需要吧
      

  2.   

    用现成的jms实现当然可以满足这个功能,但是我开发这个也是为了实践一下,不想用现成的。
      

  3.   

    不遵循JMS规范
    以后如何扩展?
      

  4.   

    建议你使用现有的消息中间件,比如WebSphere MQ。
    如果楼主想自己设计,可以参考他的思路,下面有他的RedBook。http://www.redbooks.ibm.com/redpapers/pdfs/redp0021.pdf
      

  5.   

    楼上给的文档打不开啊。IBM MQ我们公司已经用了很久了,我本人对MQ的运作模式可以说非常熟悉,现在就是因为有些地方不能用IBM MQ,所以才想到要自己写一个简单的实现,能满足基本的消息服务器的功能。也用过开源的JMS实现,比如Joran,效果不是很好。现在只想实现JMS规范中的PTP功能,上边已经说出了我得思路和一个问题,现在就是想求一个更好的思路。如果哪位牛人研究过开源的JMS实现,能不能讲一下他们的PTP方式是如何实现的?
      

  6.   

    比如现在队列TEST1里有100条消息,接进来一个Socket作为TEST1的Receiver,并且它发送了50个接收消息的请求,然后就断开了。接着,又接进来一个Socket作为TEST1的Receiver,并且也发送50个接收消息的请求,但是,第二个Socket将只能接收到小于50条的消息。这是因为,在第一个socket收玩50条消息,和该socket断开之间这段时间,那个“检测队列长度并发送消息的线程”又把一些消息写进它的InputStream里,并且从队列中删除了,所以会造成消息丢失。在第一个socket收玩50条消息,和该socket断开之间这段时间,那个“检测队列长度并发送消息的线程”又把一些消息写进它的InputStream里,我想知道的是,在这段时间内,如果没有socket连接,也就没有发送接受消息的请求,那你的监测队列还为什么要把消息写入InputStream呢?根据你上面的描述,好像你是实现了同步的消息处理,(请求和相应对应哦),但是后面的描述又是异步的。