使用 activemq-client jar 与 activemq-all jar 的问题
Problems using activemq-client jar vs activemq-all jar
我需要使用 activemq-client 而不是 roll-up activemq-all JAR 文件,因为 roll-up all 包含我们使用的其他库的不同版本。
我正在使用 maven 来管理依赖项,客户端 jar 引入:
- activemq-客户端 (5.15.8)
- slf4j-api 1.7.25
- geronimo-jms_1.1_spec (1.1.1)
- hawtbuf (1.11)
- geronimo-j2ee-management_1.1_spec (1.0.1)
all jar就是activemq-all (5.15.8)
使用此代码和 activemq-all jar,我可以连接并开始接收消息。在 createConnection()
调用中,我收到一条日志消息 "Successfully connected to ..."
使用 activemq-client jar,它在 createSession()
调用时挂起(并输出 "failed after 10 attempts, will continue trying" 消息)。我没有收到"Successfully connected to ..."消息。
ConnectionFactory factory = new ActiveMQConnectionFactory(user, pass, url);
Connection AMQconn = factory.createConnection();
Session AMQsess = AMQconn.createSession(false, Session.AUTO_ACKNOWLEDGE);
Queue queue = AMQsess.createQueue(queueName);
MessageConsumer AMQconsumer = AMQsess.createConsumer(queue);
我假设我在某处缺少依赖项,但我没有收到 no class def found
异常等。
(我也用过activemq 5.15.9版本,但我们的服务器是5.15.8,所以坚持使用)。
更大的图景(为什么客户端 jar 与汇总 jar):我需要在同一进程中连接到 hornetQ 和 AMQ,并且打破单个 jar 是我修复冲突版本的尝试易拉罐里的东西)
问题省略了 URI,但评论似乎表明用户正在尝试通过以下形式的 URI 进行连接:auto://localhost:61616
。这将是问题,因为自动传输在客户端没有意义,因为它意味着在代理端 auto 自动检测连接客户端正在使用什么协议并切换到该协议自动自动。自动传输允许代理在客户端连接的单个开放端口上支持多种协议。
ActiveMQ JMS 客户端必须始终使用 Openwire 协议(这就是它的目的),因此客户端的 URI 将采用 tcp://
、ssl://
或 failover://
等
如果您包含 ActiveMQ 代理 jar,它会带来一些特殊的便利 类,它只会映射包含在客户端中没有意义的方案的 URI,例如 nio、nio+ssl 或 auto 但它们不包含在仅客户端 jar 中,因为它们确实不属于那里,因为它们只是不适合在客户端使用。
我需要使用 activemq-client 而不是 roll-up activemq-all JAR 文件,因为 roll-up all 包含我们使用的其他库的不同版本。
我正在使用 maven 来管理依赖项,客户端 jar 引入:
- activemq-客户端 (5.15.8)
- slf4j-api 1.7.25
- geronimo-jms_1.1_spec (1.1.1)
- hawtbuf (1.11)
- geronimo-j2ee-management_1.1_spec (1.0.1)
all jar就是activemq-all (5.15.8)
使用此代码和 activemq-all jar,我可以连接并开始接收消息。在 createConnection()
调用中,我收到一条日志消息 "Successfully connected to ..."
使用 activemq-client jar,它在 createSession()
调用时挂起(并输出 "failed after 10 attempts, will continue trying" 消息)。我没有收到"Successfully connected to ..."消息。
ConnectionFactory factory = new ActiveMQConnectionFactory(user, pass, url);
Connection AMQconn = factory.createConnection();
Session AMQsess = AMQconn.createSession(false, Session.AUTO_ACKNOWLEDGE);
Queue queue = AMQsess.createQueue(queueName);
MessageConsumer AMQconsumer = AMQsess.createConsumer(queue);
我假设我在某处缺少依赖项,但我没有收到 no class def found
异常等。
(我也用过activemq 5.15.9版本,但我们的服务器是5.15.8,所以坚持使用)。
更大的图景(为什么客户端 jar 与汇总 jar):我需要在同一进程中连接到 hornetQ 和 AMQ,并且打破单个 jar 是我修复冲突版本的尝试易拉罐里的东西)
问题省略了 URI,但评论似乎表明用户正在尝试通过以下形式的 URI 进行连接:auto://localhost:61616
。这将是问题,因为自动传输在客户端没有意义,因为它意味着在代理端 auto 自动检测连接客户端正在使用什么协议并切换到该协议自动自动。自动传输允许代理在客户端连接的单个开放端口上支持多种协议。
ActiveMQ JMS 客户端必须始终使用 Openwire 协议(这就是它的目的),因此客户端的 URI 将采用 tcp://
、ssl://
或 failover://
等
如果您包含 ActiveMQ 代理 jar,它会带来一些特殊的便利 类,它只会映射包含在客户端中没有意义的方案的 URI,例如 nio、nio+ssl 或 auto 但它们不包含在仅客户端 jar 中,因为它们确实不属于那里,因为它们只是不适合在客户端使用。