今天应用Spring JMS整合ActiveMQ时发现了这样一个问题,搞了几个小时的时间,终于是明白了,随手记录一下,也给用到的朋友一个参考。
关于Spring JMS和ActiveMQ的用法在这里就不说了,推荐一篇文章,对快速的理解很有帮助
http://blog.csdn.net/buyaore_wo/article/details/7093589
好了,进入正题。我们知道,对于向Queue发送消息,如果没有消费者在监听,会将消息持久化,接收jms消息时可以是事务性的和非事务性的。对于事务性的接收,当成功提交之后才会发送确认接收回执无论是receive同步接收还是onMessage这样的异步接收,对于非事务性的接收要根据createSession时定义的标识方式进行确认签收默认是AUTO_ACKNOWLEDGE也就是在onMessage方法成功返回后即确认签收。
比如现在有这样一个需求的场景,我们希望向Queue中发送消息,发送时消费者不在线,当消费者非事务性的连接后,可以接收到它离线时没有接收到的消息。应用Spring的jmsTelement发送消息,用DefaultMessageListenerContainer监听Queue时发现,即使在监听器的onMessage()中抛出异常消息仍然被成功的签收了。消费者再次连接......还是没有消息过来,怎么办呢?看源码吧。
原来是这样啊......DefaultMessageListenerContainer其实是是用轮询的方式,调用session.receive()接收消息,然后再回调注入的监听器的onMessage(),而在非事务性接收的情况下,receive之后就会发送确认签收的回执,已经持久化的消息随即消失,所以在onMessage()中,无论怎么折腾,其实都是对已成功签收的Message进行的操作,怪不得。
既然这样,那把DefaultMessageListenerContainer的sessionTransacted改为true,并且同样在onMessage()中抛出个异常试试,理论上抛出异常后应该回滚了,而且消息会被持久化,结果呢......和理论一样,原因呢......上边已经说了。
好了,汇报完毕,请指示。
分享到:
相关推荐
将Spring与ActiveMQ整合,可以轻松地在Spring应用中实现消息队列的功能,提高系统的可扩展性和可靠性。 首先,让我们了解Spring框架如何支持消息传递。Spring提供了JmsTemplate类,这是一个模板类,用于简化发送和...
Spring集成ActiveMQ配置详解 Spring框架与ActiveMQ的集成,为开发者提供了一种高效、可靠的JMS消息处理机制。在企业级应用中,这种集成能够极大地提升系统的响应速度和容错能力,特别是在需要异步通信和分布式事务...
《Spring整合ActiveMQ深度解析》 在现代企业级应用开发中,消息队列(Message Queue)扮演着重要的角色,它能够有效地实现系统间的解耦,提高系统的可扩展性和并发处理能力。Spring作为Java领域的主流框架,与...
首先,我们要理解Spring整合ActiveMQ的核心概念。在Spring框架中,我们可以通过使用Spring的JMS模块来配置ActiveMQ。这个过程涉及到以下几个关键点: 1. **JMS配置**:在Spring的配置文件中,我们需要定义一个`...
通过以上步骤,我们就成功地整合了Spring、ActiveMQ和Maven,构建了一个能够发送和接收消息的简单示例。在实际项目中,可能还需要考虑更多因素,比如错误处理、负载均衡、消息持久化等,但这些基础知识已经为你开启...
本教程将详细介绍如何在Spring Boot项目中集成ActiveMQ,实现消息接收的Demo。 首先,我们需要在Spring Boot项目中引入ActiveMQ的相关依赖。在`pom.xml`文件中添加以下Maven依赖: ```xml <groupId>org.spring...
在Spring框架中集成ActiveMQ,我们可以创建一个高效的、可扩展的系统,利用消息队列来解耦生产者和消费者,提高系统的响应速度和可靠性。以下将详细介绍如何进行Spring与ActiveMQ的集成,并提供一些关键知识点。 1....
Spring提供了`spring-jms`模块,它包含了一组丰富的API和配置选项,使得在Spring应用中集成ActiveMQ变得简单。通过使用`JmsTemplate`类,我们可以方便地发送和接收消息。 1. **配置ActiveMQ**:在开始之前,我们...
通过以上步骤,我们就成功地将 Spring 与 ActiveMQ 整合起来,实现了简单的消息发送和接收功能。在实际应用中,还可以根据需求进行更复杂的配置,如事务支持、消息确认机制、持久化等,以满足不同场景下的业务需求。
**Spring整合ActiveMQ** 1. **配置ActiveMQ**:首先,你需要在你的项目中引入ActiveMQ的相关依赖。在Maven的pom.xml文件中,添加ActiveMQ的客户端库,并确保你的Spring配置文件中包含ActiveMQ的连接工厂配置。 2. ...
二、Spring整合ActiveMQ步骤 1. **添加依赖**:在项目中引入ActiveMQ的依赖库,通常通过Maven或Gradle的依赖管理工具进行。 2. **配置ActiveMQ服务器**:设置ActiveMQ服务器,可以是本地运行的实例,也可以是远程...
9. **Spring注解**:在提供的实例中,可能包含了使用注解的方式配置Spring与ActiveMQ的集成,如`@EnableJms`启动JMS支持,`@JmsListener`定义消息监听器等。 10. **Tomcat服务器**:Tomcat是一个流行的Java Web...
在IT行业中,Spring框架是Java领域最常用的轻量级应用框架之一,而ActiveMQ则是Apache组织提供的一个开源消息中间件,常用于实现应用程序之间的异步通信。本案例将详细讲解如何将Spring与ActiveMQ整合,以提升系统的...
接下来,**Spring与ActiveMQ的集成**:在Spring应用中配置ActiveMQ,通常需要在Spring配置文件中定义`JmsTemplate`和`DefaultMessageListenerContainer`。`JmsTemplate`用于发送消息,而`...
4. **MessageListener**: 如果需要异步接收消息,可以实现 javax.jms.MessageListener 接口并提供 onMessage 方法。Spring 可以自动将该接口的实现注册为消息监听器。 **注解驱动的实例** 在描述中提到的“注解的...
Spring整合ActiveMQ是Java消息服务(JMS)在Spring框架中的应用,用于实现生产者与消费者的解耦。在这个案例中,我们将深入探讨如何配置和使用这两个组件,以便于理解它们的工作原理。 首先,ActiveMQ是Apache软件...
在Spring框架中整合ActiveMQ,可以让我们在微服务架构或者分布式系统中实现高效的消息传递。 在"spring配置activemq详解"这个主题中,我们将探讨如何在Spring项目中配置和使用ActiveMQ。以下是对这个主题的详细说明...
而Spring框架,作为一个Java平台的全功能模块化解决方案,提供了与ActiveMQ集成的能力,让开发者能够轻松地在Spring应用中使用消息队列。本篇将深入探讨Spring与ActiveMQ的集成及其配置过程。 首先,理解Spring与...