如何使用JCSMP发布消息时是否存在错误?

时间:2016-06-07 02:44:31

标签: solace

我有以下制片人:

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?在我们得出结论发布消息没有错误之前,我应该等多久?

谢谢。

1 个答案:

答案 0 :(得分:0)

  

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

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

  

由于消息是异步发布的,因此handleError()何时发布   JCSMPStreamingPublishEventHandler被称为?我应该等多久   在我们得出结论认为发布之前没有错误之前   消息?

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

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