C# Apache NMS-如何确定连接是否已启动

C# Apache NMS-如何确定连接是否已启动,c#,.net,connection,nms,apache-nms,C#,.net,Connection,Nms,Apache Nms,我在Apache NMS的一些问题上玩得很开心。部分原因可能是我自己对平台缺乏了解 本质上,我有一个NMS STOMP客户端,用于通过STOMP发送和接收AMQ消息。API看起来有点像这样: internal sealed class NMSStompClient : IDisposable { public bool IsConnected { get; } public void Connect(Uri uri, string userId, string password

我在Apache NMS的一些问题上玩得很开心。部分原因可能是我自己对平台缺乏了解

本质上,我有一个NMS STOMP客户端,用于通过STOMP发送和接收AMQ消息。API看起来有点像这样:

internal sealed class NMSStompClient : IDisposable
{
    public bool IsConnected { get; }

    public void Connect(Uri uri, string userId, string password, TimeSpan timeout);

    public void Disconnect();

    public void Send(IDestination destination, IDestination replyDestination, long sessionId, int correlationId, byte[] messageBytes, TimeSpan timeout);

    public IDisposable Subscribe(IDestination destination, Action<IMessage> messageHandler, Action<IMessage, Exception> errorHandler);
}
我是通过反复试验才实现的。我根本找不到一个简单的方法来确定连接是否“启动”。在
IConnection
Session
上都找不到可以告诉我这一点的属性

我知道
ConnectionInterruptedListener
ConnectionResumedListener
ExceptionListener
事件,但在集成测试期间唯一引发的事件是
ExceptionListener
。此外,我知道在使用故障转移时,它们根本不会出现,我正在生产中


有人能帮我可靠地确定连接是否正常吗?或者也许可以澄清我可能存在的任何误解?

Apache.NMS.Stomp客户端确实有一个故障转移传输,它将调用中断和恢复的方法,但是在使用故障转移时,您实际上不需要关心这些,因为故障转移传输将为您处理重新连接的事情。当使用直接TCP连接时,您将只看到调用的ExceptionListener,因为从TCP传输的角度来看,一旦它失败,它就会失败,因此异常是合适的


您可以根据一般情况假设,当客户端在其ExceptionListener侦听器上收到回调时,连接状态为failed,并执行任何需要的重新连接操作,尽管如果使用故障转移传输,它将为您处理,因此,您不需要做任何工作。

Apache.NMS.Stomp客户端确实有一个故障转移传输,它将调用中断和恢复的方法。但是,在使用故障转移时,您实际上不需要关心这些方法,因为故障转移传输将为您处理重新连接的问题。当使用直接TCP连接时,您将只看到调用的ExceptionListener,因为从TCP传输的角度来看,一旦它失败,它就会失败,因此异常是合适的


您可以在一般情况下假设,当您的客户端在其ExceptionListener侦听器上收到回调时,连接状态为failed,并执行您需要的任何重新连接操作,尽管如果您使用故障转移传输,它将为您处理,因此您无需进行任何工作。

谢谢。我需要了解连接问题的原因有两个:1。向用户提供反馈。2.一旦AMQ备份,重新建立我们在AMQ之上运行的一些基础设施。不幸的是,故障转移不足以确保在AMQ恢复后重新建立基础结构。当连接丢失时,将调用ConnectionInterruptedListener和ConnectionResumedListener,然后在使用故障转移时将其恢复。@TimBish我没有看到这些侦听器触发;只有ExceptionListener。谢谢我需要了解连接问题的原因有两个:1。向用户提供反馈。2.一旦AMQ备份,重新建立我们在AMQ之上运行的一些基础设施。不幸的是,故障转移不足以确保在AMQ恢复后重新建立基础结构。当连接丢失时,将调用ConnectionInterruptedListener和ConnectionResumedListener,然后在使用故障转移时将其恢复。@TimBish我没有看到这些侦听器触发;只有ExceptionListener。
public bool IsConnected
{
    // connection is Apache.NMS.IConnection
    // session is Apache.NMS.Stomp.Session
    get { return this.connection != null && this.connection.IsStarted && this.session != null && this.session.Connection == this.connection; }
}