跳到主要内容

在事务中发布消息

要以事务方式发布消息,必须从事务性会话中获取一个 MessageProducer。然后,通过调用 MessageProducer.send(...) 在事务中发布消息。

在事务中,事件代理会暂存发布的消息,直到客户端提交事务之前,这些消息不会被传递到事件代理上的目标。如果提交成功,消息将被传递到它们的目标,并且暂存信息将被移除。

端点消息丢弃行为对事务的影响

当事务中发布的消息在提交时无法成功转储到其目标端点中的任何一个时,该消息将被丢弃。在这种情况下,端点的 reject-msg-to-sender-on-discard 属性决定了端点如何处理被丢弃的消息。

  • 如果端点的 reject-msg-to-sender-on-discard 属性被启用,客户端提交响应将返回给客户端,消息将被丢弃,并且提交失败。在这种情况下,该消息不能被转储到它可能被发送到的其他端点。
  • 如果端点的 reject-msg-to-sender-on-discard 属性未启用,消息将被“静默”丢弃(即,端点丢弃消息,但向客户端返回提交成功响应),并且提交完成。在这种情况下,该消息可以被转储到它可能被发送到的其他端点。

默认情况下,配置队列时启用 reject-msg-to-sender-on-discard 属性;配置主题端点时,该属性默认未启用。

有关 reject-msg-to-sender-on-discard 端点属性的更多信息以及可能导致端点不转储然后丢弃消息的条件,请参阅:

  • 配置队列的消息丢弃处理
  • 配置主题端点的消息丢弃处理,用于支持持久化订阅名称