当前位置: 首页 > 知识库问答 >
问题:

JMS事务标志和确认模式之间的区别

葛意远
2023-03-14

消息生成器组件具有以下功能:

session = connection.createSession(false,
                    Session.CLIENT_ACKNOWLEDGE);
producer = session.createProducer(session.createQueue(queueName));

我使用AWS SQS异步发送消息

我假设消息将在队列中,直到它被显式确认。(因为客户端确认模式)

然而,它被从队列中移除。

消息消费者组件:

我已经编写了一个异步消费者来从队列中提取消息。这是Spring配置文件;

<bean id="ConnectionFactoryBuilder"
    class="com.amazon.sqs.javamessaging.SQSConnectionFactory$Builder">
    <property name="regionName" value="us-east-1" />
    <property name="numberOfMessagesToPrefetch" value="1" />
    <property name="awsCredentialsProvider" ref="CredentialsProviderBean" />
</bean>

<bean id="ConnectionFactory" class="com.amazon.sqs.javamessaging.SQSConnectionFactory"
    factory-bean="ConnectionFactoryBuilder" factory-method="build" />

<bean id="Connection" class="javax.jms.Connection" factory-bean="ConnectionFactory"
    factory-method="createConnection" init-method="start" destroy-method="close" />

<bean id="QueueName" class="java.lang.String">
    <constructor-arg value="${sqs.queueName}" />
</bean>

<bean id="amazonMessageListener" class="com.myapp.AsyncMessageListener" />

<bean id="messageListener"
    class="org.springframework.jms.listener.adapter.MessageListenerAdapter">
    <property name="delegate" ref="amazonMessageListener" />
    <property name="defaultListenerMethod" value="onMessage" />
    <property name="messageConverter">
        <null />
    </property>
</bean>

<bean id="jmsContainer"
    class="org.springframework.jms.listener.DefaultMessageListenerContainer">
    <property name="connectionFactory" ref="ConnectionFactory" />
    <property name="destinationName" ref="QueueName" />
    <property name="messageListener" ref="messageListener" />
    <property name="sessionAcknowledgeMode" value="2"/>
</bean>

我使用sessionAcknowledgeMode属性为我的消费者配置了客户端acknowledgemode。但消息仍然会从队列中删除,而消费者不会使用消息明确确认。承认

共有1个答案

洪鸿博
2023-03-14

根据AbstractMessageListenerContainer(DefaultMessageListenerContainer的超类)文档:

“sessionAcknowledgeMode”设置为“CLIENT_ACKNOWLEDGE”:侦听器成功执行后自动确认消息;在抛出用户异常以及其他侦听器执行中断(例如JVM死机)的情况下,尽最大努力重新交付。

因此,在使用DefaultMessageListenerContainer时,如果侦听器中的onMessage()方法无一例外地返回,Spring会自动确认消息。

 类似资料:
  • 本文向大家介绍Apache Kafka和JMS之间的区别。,包括了Apache Kafka和JMS之间的区别。的使用技巧和注意事项,需要的朋友参考一下 Kafka和JMS都是消息传递系统。Java消息服务是Java提供的api。它用于在您的应用程序中实现消息传递系统。JMS支持队列和发布者/订阅者(主题)消息传递系统。使用队列,当第一个使用者使用一条消息时,该消息将从队列中删除,其他人无法再使用它

  • 问题内容: 我很惊讶地发现 和 对全球成员产生了不同的影响。我想确认我的实验是正确的行为。 在第一个示例中,更改foo模块中的成员将反映在所有导入foo的代码中。但是,在以后的情况下更改该成员似乎仅影响导入该成员的文件。换句话说,使用后一种方法将为每个导入文件提供其自己的foo成员副本。 我想要的行为是可以从所有文件访问foo.x,可以从所有文件更改它,并在所有文件中反映该更改(如果愿意,则为真正

  • 问题内容: 策略模式和命令模式有什么区别?我也在寻找Java中的一些示例。 问题答案: 通常,命令模式用于使对象脱离 需要完成的工作 -进行操作及其参数并将其包装在要记录的对象中,以备撤消,发送到远程站点等。随着时间的流逝,它们将往往是大量不同的Command对象,它们会通过系统中的给定点,并且Command对象将包含描述所需操作的各种参数。 另一方面,策略模式用于指定应 该如何做 ,并插入到较大

  • 本文向大家介绍浏览器标准模式和怪异模式之间的区别是什么?相关面试题,主要包含被问及浏览器标准模式和怪异模式之间的区别是什么?时的应答技巧和注意事项,需要的朋友参考一下 这是个历史遗留问题,W3C标准推出前,旧的页面都是根据旧的渲染方式对页面进行渲染的,因此在W3C标准推出后为了保证旧页面的正常显示,保持浏览器的兼容性,这样浏览器上就产生了能够兼容W3C标准渲染的严格模式和保证旧页面显示的怪异模式的

  • 问题内容: 装饰器模式和委托模式(如果有)之间有什么区别?我不仅想了解实现细节,还不想了解用例差异和如何使用它们的主观观点。 装饰图案 委托模式 编辑: 您能否指向使用这些模式的OS源代码(在OS项目中)(尤其是委托,因为在Java IO类中使用了装饰)。我正在寻找一些实际用法,而不仅仅是虚拟示例。也许这些模式是相同的,只是标题不同。随时写这个意见。 问题答案: 装饰器使用委派,但使用一种非常特定

  • 本文向大家介绍SQL Server中Star模式和Snowflake模式之间的区别,包括了SQL Server中Star模式和Snowflake模式之间的区别的使用技巧和注意事项,需要的朋友参考一下 星型图式是关系式图式,它遵循事实和维度的概念。事实表用于存储事件,例如登录,维度 表用于存储分区事件的参考数据。在星型模式中,由于此查询的执行时间非常快,因此表被完全非规范化。 雪花化是一种规范STA