【发布时间】:2021-11-20 12:08:18
【问题描述】:
需要您的帮助才能找到解决方案。当前实施细节:
SolConnectionFactory connectionFactory = SolJmsUtility.createConnectionFactory(); // for create connection factory using host , vpn,trust store,keystore with auth scheme AUTHENTICATION_SCHEME_CLIENT_CERTIFICATE
this.connection = connectionFactory.createConnection(); // connection creation
session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE); // session creation using client acknowledge
使用 MessageListener 监听队列
public class MyListener implements MessageListener
public void onMessage(Message message) // receive the message and process
{
/* in this method validating the message (poison message)
* and publish to kafka, once receive the success message
* from kafka acknowledge the message
*/
message.acknowledge();
}
问题:如果 Kafka 代理宕机了如何重试?我们与内部 Solace 团队进行了讨论。
我们假设如果客户端没有调用message.acknowledge()Solace 将进行重试,但内部 Solace 团队澄清它正在使用窗口机制,所以如果后续消息是确认,那么之前的消息也会确认并删除。
他们的建议是发回失败消息的 NACK(否定确认),然后 Solace 可以重试该消息。如何使用 Java API 发送 NACK?
Max_Un_Ack_Message 和 Max_Redeliver_Count 的建议值是多少?
Solace 的 Maven 依赖项:
<dependency>
<groupId>com.solacesystems</groupId>
<artifactId>sol-jms</artifactId>
<version>10.0.0</version>
</dependency>
【问题讨论】:
标签: java jms solace retry-logic