我有以下制片人:
XMLMessageProducer producer = session.getMessageProducer(new JCSMPStreamingPublishEventHandler() {
@Override
public void handleError(String messageID, JCSMPException cause, long timestamp) {
logger.error("Error occurred when sending message {} ", messageID, cause);
}
// This method is only invoked for persistent and non-persistent
// messages.
@Override
public void responseReceived(String messageID) {
logger.info("Response received for message {} ", messageID);
}
});
当调用producer.send()
向主题发布消息时,如何知道是否存在任何错误,因为未针对Direct消息调用responseReceived()
?由于消息是异步发布的,handleError()
何时会调用JCSMPStreamingPublishEventHandler
?在我们得出结论发布消息没有错误之前,我应该等多久?
谢谢。
答案 0 :(得分:0)
调用
producer.send()
向主题发布消息时,如何操作 我知道是否有任何错误,因为responseReceived()
不是 调用直接消息传递?
从documentation开始,直接消息传递提供了从Solace消息总线到消费客户端的可靠但不保证的消息传递。它们通常在需要极高的消息速率和极低延迟时使用。权衡的是,当遇到拥塞或系统故障时,它们也可以被丢弃。这就是为什么没有发送直接消息的确认。
由于消息是异步发布的,因此
handleError()
何时发布JCSMPStreamingPublishEventHandler
被称为?我应该等多久 在我们得出结论认为发布之前没有错误之前 消息?
对于直接消息,将不会成功发布确认。当JCSMPSession.send()
返回时,表示API已将数据写入TCP发送缓冲区。发现之后发生的网络断开等系统故障将无法检测到,并且消息可能会丢失。
对于保证消息,只有在调用responseReceived()
时,才能保证消息在设备/ VMR上假脱机。如果发生错误,将调用handleError()
。