第 8 章 消息发送


8.1. 处理未确认的交付

消息传递系统使用消息确认来跟踪发送消息的目标是否真正实现。

发送邮件时,发送邮件之后和确认之前有一段时间(消息为"在机中")。如果在这段时间内丢失网络连接,消息发送的状态未知,并且传输可能需要在应用代码中特殊处理以确保完成。

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

不经过翻译且交付未经确认的生产者

如果邮件处于运行状态,会在重新连接后再次发送,只要未设置发送超时且未通过。

不需要用户操作。

有未提交的事务的转译制作者

如果邮件处于转机状态,则在重新连接后再次发送。如果发送是新事务中的第一个,则在重新连接后发送会正常进行。如果之前发送了事务,则事务被视为失败,且任何后续的提交操作都会抛出 TransactionRolledBackException

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

带有待处理的提交进行转换的制作者

如果提交处于机状态,则事务被视为失败,且任何后续的提交操作都会抛出 TransactionRolledBackException

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

带有未经确认的交付的非已传输消费者

如果收到消息但尚未确认,则确认消息不会生成任何错误,但不会导致客户端不执行任何操作。

由于收到的消息未被确认,生产者可能会重新发送消息。为避免重复,用户必须通过消息 ID 过滤掉重复的消息。

带有未提交交易的转换消费者

如果一个活跃的事务尚未提交,它将被视为失败,任何待处理的确认都会被丢弃。任何后续提交操作都会抛出 TransactionRolledBackException

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

带有待处理的提交进行转换的消费者

如果提交正在进行,则该交易将被视为失败。任何后续提交操作都会抛出 TransactionRolledBackException

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

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.