我需要使用 activemq-client 而不是汇总 activemq-all JAR 文件,因为汇总包含我们使用的其他库的不同版本。
我使用 Maven 来管理依赖项,客户端 jar 会引入:
- activemq-client (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()
调用中,我收到一条日志消息“已成功连接到...”
使用 activemq-client jar,它会在 createSession()
调用处挂起(并输出“10 次尝试后失败,将继续尝试”消息)。我没有收到“成功连接到...”消息。
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 是我尝试修复冲突版本的尝试卷起 jar )
最佳答案
该问题省略了 URI,但注释似乎表明用户尝试通过以下形式的 URI 进行连接:auto://localhost:61616
。这将是一个问题,因为自动传输在客户端没有意义,因为它意味着在代理端自动检测连接客户端正在使用的协议(protocol)并切换到该协议(protocol)自动。自动传输允许代理在客户端连接的单个开放端口上支持多种协议(protocol)。
ActiveMQ JMS 客户端必须始终使用 Openwire 协议(protocol)(这就是它的构建目的),因此客户端的 URI 格式为 tcp://
, ssl://
或 failover://
等
如果您包含 ActiveMQ 代理 jar,则会启动一些特殊的便利类,这些类只会映射包含在客户端中没有意义的方案的 URI,例如 nio、nio +ssl 或 auto 但它们不包含在仅限客户端的 jar 中,因为它们实际上不属于那里,因为它们不适合在客户端使用。
关于java - 使用 activemq-client jar 与 activemq-all jar 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56632968/