客户端崩溃后 ActiveMQ 代理未能遵守最大交付尝试
ActiveMQ Broker Fails To Respect Max Delivery Attempts Following Client Crash
我在代理上使用 ActiveMQ 5.15.14 和自定义的重新传递策略,以便在尝试向我的客户重新传递一次后将错误消息传递到 DLQ。
当使用 Spring 基于引导的客户端时,当从 Java 代码中抛出异常时,这可以正常工作。但是,如果 Java 客户端崩溃或突然终止,代理中的重新传递计数会增加,但无论重新传递尝试的次数如何,消息都不会发送到 DLQ。
有没有办法让代理根据客户端断开连接而不是报告实际异常将消息移动到 DLQ?
您可以为功能请求打开 JIRA 票证,但我不确定它是否会获得很大的吸引力。
考虑一下,代理并不真正知道消费者是否收到消息。使用这种方法,您会在维护 window 或不稳定的网络情况下将大量消息移至 DLQ。此外,在客户端断开连接时将有效消息移动到 DLQ 将通过任何合理的顺序传递消息。
通常,对于消息错误处理,最好分开:
- 'bad message'(即格式不正确JSON)
- 'retry delivery'(即消费者无法接收消息)。
一般来说,用户希望在#1 上立即转移到 DLQ,并在#2 上永远重试
我在代理上使用 ActiveMQ 5.15.14 和自定义的重新传递策略,以便在尝试向我的客户重新传递一次后将错误消息传递到 DLQ。
当使用 Spring 基于引导的客户端时,当从 Java 代码中抛出异常时,这可以正常工作。但是,如果 Java 客户端崩溃或突然终止,代理中的重新传递计数会增加,但无论重新传递尝试的次数如何,消息都不会发送到 DLQ。
有没有办法让代理根据客户端断开连接而不是报告实际异常将消息移动到 DLQ?
您可以为功能请求打开 JIRA 票证,但我不确定它是否会获得很大的吸引力。
考虑一下,代理并不真正知道消费者是否收到消息。使用这种方法,您会在维护 window 或不稳定的网络情况下将大量消息移至 DLQ。此外,在客户端断开连接时将有效消息移动到 DLQ 将通过任何合理的顺序传递消息。
通常,对于消息错误处理,最好分开:
- 'bad message'(即格式不正确JSON)
- 'retry delivery'(即消费者无法接收消息)。
一般来说,用户希望在#1 上立即转移到 DLQ,并在#2 上永远重试