【问题标题】:Is it possible to find if the connection has been established in active mq in c#是否可以在c#的活动mq中找到连接是否已建立
【发布时间】:2014-04-22 18:22:21
【问题描述】:

这是我的代码

    private Connection _connection;

    private ISession _session;

    private const String QUEUE_DESTINATION = "DotNet.ActiveMQ.Test.Topic";

    ConnectionFactory factory;        

    Transpo

    public void TestInitialize()
    {
        factory = new ConnectionFactory("tcp://localhost:61616");

        _connection = factory.CreateConnection("system", "manager") as Connection;

        bool x=_connection.TransportFailed;

        _connection.ClientId = "LFV";//Exception when connection not estab

        _connection.Start();//Exception when connection not estab

        _session = _connection.CreateSession();
    }

我在 _connection.ClientId 和 _connection.Start 处遇到异常。有什么方法可以通过在调用 start 方法并分配客户端 ID 之前查找连接是否已建立来避免此异常。

【问题讨论】:

  • 你得到什么异常?您的 clientId 必须是唯一的(您得到的异常可能与此有关)。

标签: c# jms activemq


【解决方案1】:

如果您没有设置唯一的客户端 ID,则会出现异常,因为对于任何给定的客户端 ID,只有一个客户端可以连接到代理。如果您修复代码,使每个客户端应用程序都有自己的唯一客户端 ID,那么问题应该会自行解决。当然,您也可以在 Connection 上设置异常侦听器以获取错误通知。

无法测试连接,因为它正在等待您设置 ClientId 或启动连接以充当 JMS 客户端。在开始调用或任何需要完全建立连接的调用(如 createSession 等)之前,不会发生实际的连接握手。您应该编写应用程序以响应连接开始时的故障。

哦,仅供参考,在调用 start 之后设置客户端 ID 将无效,因为它只允许在连接开始之前。

【讨论】:

  • 我使用的是唯一的客户端 ID。这种情况是,如果有人尝试使用无效的用户名/密码进行连接,或者说活动的 mq 服务已关闭,我想在分配客户端 ID 之前知道连接未建立。
  • 自从我上次使用 AMQ 已经有一段时间了,所以我不确定它是否会起作用,但您可以尝试在 _connection.Start(); 之后设置 clientId称呼。默认情况下,如果在连接之前没有提供,AMQ 将提供一个唯一的客户端 ID。开始,我只是不确定你是否可以在连接开始后更改它。
猜你喜欢
  • 2015-06-04
  • 1970-01-01
  • 1970-01-01
  • 2012-03-02
  • 1970-01-01
  • 2020-03-31
  • 2012-05-08
  • 2021-01-09
  • 2016-12-13
相关资源
最近更新 更多