gpt4 book ai didi

spring-boot - Solace Queue - 消息应在异常时自动重新传递而无需重新连接 session

转载 作者:行者123 更新时间:2023-12-05 05:57:14 34 4
gpt4 key购买 nike

我们计划使用 Solace 队列管理。其中一个用例是,在消费者收到消息后,如果在处理消息时出现任何异常,消息应该自动重新传递。

截至目前,我没有向队列发送确认消息,因此消息不会从队列中删除,但不幸的是它无法自动重新传送。如果我重新启动 session ,那么只有我能够收到相同的消息。

我探索了几个选项,例如。 session.rollback 或 session.revoke 异常但它会增加队列中所有消息的传递计数。也没有任何延迟时间的配置来重新传递相同的消息。

预期是,相同的消息应在 30 分钟(配置的延迟)后自动重新传送。

下面是我用于消费者的示例代码:

https://github.com/SolaceSamples/solace-samples-jms/blob/master/src/main/java/com/solace/samples/QueueConsumer.java

@Override
public void onMessage(Message message) {
try {
if (message instanceof TextMessage) {
System.out.printf("TextMessage received: '%s'%n", ((TextMessage) message).getText());
} else {
System.out.println("Message received.");
}
System.out.printf("Message Content:%n%s%n", SolJmsUtility.dumpMessage(message));

// ACK the received message manually because of the set SupportedProperty.SOL_CLIENT_ACKNOWLEDGE above
message.acknowledge();

latch.countDown(); // unblock the main thread
} catch (JMSException ex) {
System.out.println("Error processing incoming message.");
ex.printStackTrace();
}
}

感谢您的支持。谢谢

最佳答案

Solace 目前不支持此类功能。消息不会在应用层重新传递。只有在重新建立连接(准确地说是流程)时,它们才会被重新传送。

Solace 确实在传输级别重新传递消息。这样做的目的是确保将消息传递到应用程序缓冲区。从那时起,它的应用程序有责任处理它们并确认。超过该点重新传递将导致在消费者端重复消息 - 这将违反包括 JMS 在内的多个协议(protocol)。

当应用程序流重新建立时,任何未确认的消息都可以安全地重新传递,因为我们知道它被传递到的原始流不能再确认​​消息(并导致潜在的重复消息传递)。

关于spring-boot - Solace Queue - 消息应在异常时自动重新传递而无需重新连接 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68869577/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com