使用Apache.NMS.ActiveMQ v5.18.2在C#中运行发布者代码遇tcp匹配错误
问题描述
使用C#的Apache.NMS.ActiveMQ v5.18.2运行发布者代码时,抛出以下错误:
Apache.NMS.NMSConnectionException: 'Error creating transport.' Exception: NewInstance failed to find a match for id = tcp
代码示例:
String host = env("ACTIVEMQ_HOST", "localhost"); int port = Int32.Parse(env("ACTIVEMQ_PORT", "61616")); String brokerUri = "activemq:tcp://" + host + ":" + port; NMSConnectionFactory factory = new NMSConnectionFactory(brokerUri); IConnection connection = factory.CreateConnection(user, password); // 错误发生在此行
已尝试从最新版本2.1.0开始降级ActiveMQ NuGet包,但问题未解决。
解决方案
- 检查NuGet依赖完整性:确保同时安装
Apache.NMS核心包,且版本与Apache.NMS.ActiveMQ完全匹配。TCP传输的实现依赖核心包组件,版本不匹配或缺失会导致找不到传输实例。 - 调整Broker URI格式:移除URI中的
activemq:前缀,直接使用tcp://host:port格式。部分版本的NMSConnectionFactory对前缀解析存在兼容问题,示例代码:String brokerUri = $"tcp://{host}:{port}"; - 手动指定传输工厂:如果URI调整无效,可显式创建TCP传输工厂并传入连接工厂,示例:
Uri uri = new Uri($"tcp://{host}:{port}"); ITransportFactory transportFactory = new TcpTransportFactory(); ITransport transport = transportFactory.CreateTransport(uri); NMSConnectionFactory factory = new NMSConnectionFactory(transport); - 清理重装NuGet包:删除项目的
packages和obj目录,重新安装所有NuGet依赖,避免缓存的损坏包引发异常。
内容的提问来源于stack exchange,提问作者NAGALAXMI SOMAYAJI
相关产品推荐
相关产品推荐

