【问题标题】:Apache NMS - how to determine if connection is upApache NMS - 如何确定连接是否正常
【发布时间】:2012-03-13 20:18:42
【问题描述】:

我在处理一些 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);
}

我试图让我的集成测试始终如一地通过,但是当我增加 AMQ 停机的时间时它们总是会失败(在 10 秒时通过,在 60 秒时失败)。经过大量的调试和跟踪后,我发现问题似乎源于我的IsConnected 实现(或者,至少,这是问题的部分):

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; }
}

我通过反复试验得出了这个实施方案。我根本找不到一种简单的方法来确定连接是否“正常”。我在IConnectionSession 上找不到可以告诉我这一点的属性。

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

谁能帮助我可靠地确定连接是否正常?或者澄清一下我可能有的任何误解?

【问题讨论】:

    标签: c# .net connection nms apache-nms


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢。我需要了解连接问题的原因有两个: 1. 向用户提供反馈。 2. 一旦 AMQ 备份,重新建立我们在 AMQ 上运行的一些基础设施。不幸的是,故障转移不足以让我们确保在 AMQ 恢复后重新建立基础架构。
    • ConnectionInterruptedListener 和 ConnectionResumedListener 将在连接丢失时调用,随后在使用故障转移时恢复。
    • @TimBish 我没有看到那些听众发火;只有异常监听器。 stackoverflow.com/questions/2030657/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-24
    • 1970-01-01
    • 1970-01-01
    • 2011-03-12
    • 2015-12-17
    • 2018-02-14
    • 2010-12-21
    相关资源
    最近更新 更多