1

我有以下制作人:

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()向主题发布消息时,我如何知道是否有任何错误,因为responseReceived()没有为直接消息调用而调用?由于消息是异步发布handleError()的,什么时候JCSMPStreamingPublishEventHandler调用?我应该等多久才能得出发布消息没有错误的结论?

谢谢你。

4

1 回答 1

0

在调用producer.send()向主题发布消息时,我如何知道是否有任何错误,因为responseReceived()没有为直接消息调用而调用?

文档中可以看出,直接消息传递提供了从 Solace 消息总线到消费客户端的可靠但不保证的消息传递。当需要极高的消息速率和极低的延迟时,通常会使用它们。权衡是它们也可以在遇到拥塞或系统故障时被丢弃。这就是为什么没有确认发送直接消息的原因。

由于消息是异步发布handleError()的 ,什么时候JCSMPStreamingPublishEventHandler调用?我应该等多久才能得出发布消息没有错误的结论?

对于直接消息,将不会确认成功发布。返回时JCSMPSession.send(),表示 API 已将数据写入 TCP 发送缓冲区。系统故障(例如发生的网络断开)将不会被检测到,并且消息可能会丢失。

对于 Guaranteed 消息,仅保证在responseReceived()调用消息时在设备/VMR 上假脱机。如果发生错误,handleError()将被调用。

于 2016-06-07T06:53:12.313 回答