第 8 章 消息交付


8.1. 处理未确认的发送

消息传递系统使用消息确认来跟踪消息的目标是否真正完成。

发送消息后,在邮件被发送并被确认前有一个时间段(消息为"in flight")。如果此时丢失网络连接,消息交付的状态未知,发送可能需要在应用程序代码中特殊处理,以确保其完成。

以下小节描述了连接失败时消息交付的条件。

非转换生成者带有未确认的发送

如果消息在 flight 中,它会在重新连接后再次发送,只要未设置发送超时,且尚未设置。

不需要用户操作。

带有未提交事务的 transacted producer

如果消息在 flight 中,它会在重新连接后再次发送。如果发送是新事务中的第一个,则在重新连接后发送将继续正常。如果以前的事务中发送,则事务被视为失败,后续提交操作都会引发 TransactionRolledBackException

为确保发送,用户必须重新发送属于失败事务的任何消息。

带有待处理提交的 transacted producer

如果提交处于 flight,则事务被视为失败,后续提交操作都会引发 TransactionRolledBackException

为确保发送,用户必须重新发送属于失败事务的任何消息。

非转换的消费者,带有未确认的发送

如果收到消息但尚未确认,则确认消息不会产生任何错误,但不会给客户端产生任何操作。

由于收到的消息没有被确认,因此生成者可能会重新发送它。为避免重复,用户必须根据消息 ID 过滤出重复的消息。

带有未提交事务的 transacted consumer

如果还没有提交活动事务,它将被视为失败,并丢弃任何待处理的确认。任何后续提交操作都会抛出 TransactionRolledBackException

生产者可能会重新发送属于事务的消息。为避免重复,用户必须根据消息 ID 过滤出重复的消息。

使用待处理的提交转换消费者

如果提交处于 flight,则事务将被视为失败。任何后续提交操作都会抛出 TransactionRolledBackException

生产者可能会重新发送属于事务的消息。为避免重复,用户必须根据消息 ID 过滤出重复的消息。

Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2026 Red Hat
返回顶部