如何捕获 ActiveMQAddressFullException?
How to catch ActiveMQAddressFullException?
使用带有嵌入式 ActiveMQ Artemis 的 WildFly 作为 JMS 实现。队列设置有固定的内存大小,如果队列已满则执行 FAIL
操作。我需要能够捕获由此产生的异常,以便客户端停止发送新消息。但是调用send的时候好像没有出现异常,而是在事务结束的几个方法up。我不确定如何正确处理它。
如果您正在使用事务,那么当您在 JMS MessageProducer
上调用 send
时,消息 而不是 实际发送。它们的消息仅在提交事务时发送。像这样将多个操作一起批处理是事务的主要特征之一。如果在提交事务时发送消息有问题,那么事务提交将失败,但是“发送”消息的特定 MessageProducer
将不知道。您需要停止使用交易或以其他方式将问题通知发件人(这只会追溯)。
如果您只使用事务,因为您需要知道消息已成功到达队列并且您不需要将多个 JMS 操作组合到一个逻辑单元中,那么您可以停止使用交易和:
- 确保您发送的是持久的(即持久的)消息。
- 在您的客户端中设置
blockOnNonDurableSend=true
URL 是否发送非持久(即非持久)消息。
在任何一种情况下,客户端都将等待消息已成功收到的代理的响应。您可以在 the ActiveMQ Artemis documentation.
中阅读更多相关信息
如果您的客户端在等待响应时超时,则可能意味着代理没有收到消息,您可以重新发送。但是,在某些情况下,代理(或网络)可能会在 after 成功接收消息但 before 响应可以到达客户端时失败。在这些情况下,如果客户端再次发送消息,可能会导致重复。为了降低重复的风险,您可以在消息上设置重复 ID 并在代理上使用重复检测。您可以在 the ActiveMQ Artemis documentation.
中阅读有关重复检测的更多信息
在任何情况下,无论消息是在调用 send
时实际发送还是稍后在调用 commit
时发送,消息都应该 而不是 实际发送如果自从您使用 FAIL
.
后已达到 max-size-bytes
使用带有嵌入式 ActiveMQ Artemis 的 WildFly 作为 JMS 实现。队列设置有固定的内存大小,如果队列已满则执行 FAIL
操作。我需要能够捕获由此产生的异常,以便客户端停止发送新消息。但是调用send的时候好像没有出现异常,而是在事务结束的几个方法up。我不确定如何正确处理它。
如果您正在使用事务,那么当您在 JMS MessageProducer
上调用 send
时,消息 而不是 实际发送。它们的消息仅在提交事务时发送。像这样将多个操作一起批处理是事务的主要特征之一。如果在提交事务时发送消息有问题,那么事务提交将失败,但是“发送”消息的特定 MessageProducer
将不知道。您需要停止使用交易或以其他方式将问题通知发件人(这只会追溯)。
如果您只使用事务,因为您需要知道消息已成功到达队列并且您不需要将多个 JMS 操作组合到一个逻辑单元中,那么您可以停止使用交易和:
- 确保您发送的是持久的(即持久的)消息。
- 在您的客户端中设置
blockOnNonDurableSend=true
URL 是否发送非持久(即非持久)消息。
在任何一种情况下,客户端都将等待消息已成功收到的代理的响应。您可以在 the ActiveMQ Artemis documentation.
中阅读更多相关信息如果您的客户端在等待响应时超时,则可能意味着代理没有收到消息,您可以重新发送。但是,在某些情况下,代理(或网络)可能会在 after 成功接收消息但 before 响应可以到达客户端时失败。在这些情况下,如果客户端再次发送消息,可能会导致重复。为了降低重复的风险,您可以在消息上设置重复 ID 并在代理上使用重复检测。您可以在 the ActiveMQ Artemis documentation.
中阅读有关重复检测的更多信息在任何情况下,无论消息是在调用 send
时实际发送还是稍后在调用 commit
时发送,消息都应该 而不是 实际发送如果自从您使用 FAIL
.
max-size-bytes