Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring JMS订阅服务器无法接收消息?_Java_Spring_Jms - Fatal编程技术网

Java Spring JMS订阅服务器无法接收消息?

Java Spring JMS订阅服务器无法接收消息?,java,spring,jms,Java,Spring,Jms,我使用SpringJMS和WebSphere默认消息传递提供程序来满足我的消息传递需求。 我已经在WAS上创建了一个主题和连接工厂 我可以使用我的发布者提供的JMSTemplate向主题发送消息 但每当我在订阅服务器中调用JmsTemplate.receive()时,它就会进入等待状态,我无法在订阅服务器中接收消息 但是,如果使用侦听器作为订阅者,或者在使用发布服务器发布消息时启动新线程,我可以使用JmsTemplate在订阅者中接收消息 寻求帮助 邮件不存储在主题中。如果创建发布者,发送消息,

我使用SpringJMS和WebSphere默认消息传递提供程序来满足我的消息传递需求。 我已经在WAS上创建了一个主题和连接工厂

我可以使用我的发布者提供的
JMSTemplate
向主题发送消息

但每当我在订阅服务器中调用
JmsTemplate.receive()
时,它就会进入等待状态,我无法在订阅服务器中接收消息

但是,如果使用侦听器作为订阅者,或者在使用发布服务器发布消息时启动新线程,我可以使用
JmsTemplate
在订阅者中接收消息


寻求帮助

邮件不存储在主题中。如果创建发布者,发送消息,然后启动订阅者,则不会订阅任何消息。在发布时,如果有订阅该主题的订阅者,则只有这些订阅者才会收到消息。如果不存在订阅者,则将删除消息

它进入等待状态,这意味着它正在等待来自JMS服务器的消息,并且当前没有可用消息

无论您使用哪种订阅模式,在创建订阅服务器之前都需要使用异步(MessageListener)或同步(receive)

你可以用

subscriber.receive(long timeout);

如果您不想无限期地等待。

那么,如果我们在同步模式下使用Spring JMS,那么在发布者发布主题之前,我们需要在订阅服务器中调用JmsTemplate.receive()。是这样吗?所以这里我们的订阅者将在一个单独的线程中等待,然后订阅者将在另一个线程中而不是Publisher中。是这样吗?如果我错了,请纠正。是的!订阅者将只订阅在其变为活动后发布的消息。当然,除非它是一个持久订户。如果是持久订户,即使它处于脱机状态,当它返回联机状态时,也会收到所有丢失的消息。非常感谢Aniket!!因此,如果我们对非持久订阅者使用SpringJMS(Synch.),那么我们可能无法在单个线程中实现发布者和订阅者。我的意思是我不能那样做。它是?期待您的指导!不,您不能在具有发布服务器和异步非持久订阅者的单线程中运行。因为您运行订阅服务器的方式可能是在无限while循环中调用receive(),这必须在您发布消息之前进行。谢谢Aniket,您的信息非常有用!!如果我只是在没有任何第三方代理(如Actice MQ)的情况下使用SpringJMS,并且希望为synch和asynch这两种情况创建持久订户,那么我必须进行哪些配置。有任何链接可用吗?