gpt4 book ai didi

c# - Apache NMS - 如何确定连接是否正常

转载 作者:行者123 更新时间:2023-11-30 21:08:48 25 4
gpt4 key购买 nike

我遇到了一些 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 事件,但在我的集成测试期间唯一引发的事件是 异常监听器。此外,我知道在使用我正在生产的故障转移时根本不会引发它们。

谁能帮我可靠地确定连接是否正常?或者消除我可能有的任何误解?

最佳答案

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

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

关于c# - Apache NMS - 如何确定连接是否正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9412846/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com