gpt4 book ai didi

java - JMS 和 Spring 批处理

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:56:46 24 4
gpt4 key购买 nike

我们的项目是集成两个应用程序,使用每个应用程序的 rest api,使用 JMS(提供异步特性)和 spring batch 从 JMS 队列中读取批量数据并处理它,然后将其发布到接收应用程序。

我是 JMS 和 Spring Batch 的新手。我有几个基本问​​题要问:

  • 采用哪种 JMS 模型 -(PTPPub/Sub)
  • 能否从 JMS 队列中批量读取消息(使用 JMSItemReader)。如果是,任何人都可以提供代码。
  • 我们希望在消息成功发布(即读取-处理-写入)到接收应用程序后确认消息为“已读”,而不是在 JMSItemReader 读取消息时。我们怎样才能做到这一点?

高级设计图如下 enter image description here

最佳答案

PTP 与发布/订阅

使用消息队列的点对点方法是最标准的方法。特别是在批处理应用程序中,我看不到使用发布订阅的直接原因,它假设您有多个消费者使用相同的消息。

理论上,如果需要对相同的数据 block 执行多个函数,您可以将不同的处理器组织为订阅者,以这种方式扩展应用程序,但这是非常高级的使用场景。

是否可以从 JMS 队列中批量读取消息:

此处的 JMS 规范仅讨论(含糊不清可能是误读)消息的批量确认,但并未对消息的批量传递设置要求。

CLIENT_ACKNOWLEDGE - With this option, a client acknowledges a message by calling the message’s acknowledge method. Acknowledging a consumed message automatically acknowledges the receipt of all messages that have been delivered by its session.

关于批量传送的简单回答是“如果 JMS 提供者支持,则支持,否则不支持”

大多数供应商允许批量确认消息

这是 Oracles 的界面:

public interface com.sun.messaging.jms.Message {
void acknowledgeThisMessage() throws JMSException;
void acknowledgeUpThroughThisMessage() throws JMSException;
}

CLIENT_ACKNOWLEDGE 的组合。 + 调用 acknowledgeUpThroughThisMessage 方法。 message 将确认截至该时刻收到的所有消息。

消息的手动确认:

这可以通过 CLIENT_ACKNOWLEDGE 和消息上的确认方法来实现。在这里,我将再次引用您确认方法的 javadoc,它也再次引用您的第二个问题,它讨论了对所有消息的批量确认。

void acknowledge() throws JMSException Acknowledges all consumed messages of the session of this consumed message. All consumed JMS messages support the acknowledge method for use when a client has specified that its JMS session's consumed messages are to be explicitly acknowledged. By invoking acknowledge on a consumed message, a client acknowledges all messages consumed by the session that the message was delivered to.

Calls to acknowledge are ignored for both transacted sessions and sessions specified to use implicit acknowledgement modes.

A client may individually acknowledge each message as it is consumed, or it may choose to acknowledge messages as an application-defined group (which is done by calling acknowledge on the last received message of the group, thereby acknowledging all messages consumed by the session.)

Messages that have been received but not acknowledged may be redelivered.

关于java - JMS 和 Spring 批处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32992665/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com