春季4的JMS文档:http://docs.spring.io/spring/docs/4.0.0.RELEASE/spring-framework-reference/htmlsingle/#jms-receiving似乎没有涵盖这一点。
我有多个客户端使用套接字连接到套接字服务器。它们将消息发送到我的服务器并接收消息,所有消息都通过活动的MQ队列进行路由。
某些消息会收到回复消息。当客户端发送消息A以获取响应B以发送回客户端时,会发生此问题。将A发送到服务器后,打开套接字的框因错误而丢失。消息B返回并在队列中等待,没有任何东西可以获取结果。
据我了解,您可以为没有自动确认的持久主题设置JMS队列。这样,如果服务器掉线,则消息会返回并广播到所有盒子。如果其中一个框当前连接到该客户端,它将处理该消息。
如果没有,它将进入队列,直到新服务器连接,然后它将再次执行。一旦发送消息,它将被标记为已确认并从队列中删除。
由于这似乎可以用于活动MQ,我如何使用Spring 4实现?
答案 0 :(得分:0)
您想要的是使用交易而不是依赖确认。然后,您可以在读取时启动事务,然后在发送响应消息时提交事务。如果发生了一些不好的事情,事务就会回滚,一些消耗消息的节点必须重做该过程。
可以设置Spring中的DefaultMessageListenerContainer来支持事务。 javadoc相当不错,提供了有关弹簧和交易(本身,一个相当大的主题)的其他信息来源的链接。简而言之,如果您设置了会话事务处理,那么如果抛出Exception并在onMessage方法返回时提交,则事务将回滚。