java - 使用 activemq-client jar 与 activemq-all jar 的问题

标签 java jms activemq

我需要使用 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,例如 nionio +sslauto 但它们不包含在仅限客户端的 jar 中,因为它们实际上不属于那里,因为它们不适合在客户端使用。

关于java - 使用 activemq-client jar 与 activemq-all jar 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56632968/

相关文章:

activemq - Amazon MQ 高存储百分比

java - 如何从 Xades4J 签名中的签名元素中删除 namespace ?

java - Spring RabbitMQ 监听器返回一个以逗号分隔的 ASCII 小数字符串

java - 有没有办法在连接到 Active MQ 队列时让 Spring JMS 监听器有初始延迟?

rabbitmq - 当消息发布到没有订阅者的队列上时会发生什么?

java - activemq 数据源的延迟初始化

java - ActiveMQ KahaDB 总是锁定和等待

java - 解析来自 .Net 网络服务的 JSON 响应

java - Spring-security/登录重定向

jms - 尝试远程连接到 websphere 上的 JMS 队列时 sun/io/MalformedInputException