JMS Support 2.0 与 AMQ Classic 6.x 配合良好,但如果我使用 activemq-pool
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-pool</artifactId>
<version>6.1.3</version>
</dependency>
我明白了
java.lang.UnsupportedOperationException: createContext() is not supported
at org.apache.activemq.jms.pool.PooledConnectionFactory.createContext(PooledConnectionFactory.java:280)
因此,这里似乎没有提供 JMS 2.0 支持(尽管包含了正确的瞬态 amq-client 依赖项)。
有什么原因吗?
您看到的是预期结果。我建议您使用基于 ActiveMQ Classic 代码库但完全支持 JMS 2 的池。
尽管如此,值得注意的是,ActiveMQ Classic 附带的任何JMS 客户端实现版本都不完全支持 JMS 2,即使在最新的 6.x 版本中也是如此。它仍然缺乏对以下 JMS 2 功能和方法的支持:
JMSConsumer.receiveBody(Class)
JMSConsumer.receiveBody(Class, long)
JMSConsumer.receiveBodyNoWait(Class)
JMSProducer.setDeliveryDelay(long)
JMSProducer.getDeliveryDelay()
MessageProducer.setDeliveryDelay(long)
MessageProducer.getDeliveryDelay()
JMSProducer.setAsync(CompletionListener)
JMSProducer.getAsync()
MessageProducer.send(Destination, Message, CompletionListener)
MessageProducer.send(Destination, Message, int, int, long, CompletionListener)
MessageProducer.send(Message, CompletionListener)
MessageProducer.send(Message, int, int, long, CompletionListener)
Session.createSharedConsumer(Topic, String)
Session.createSharedConsumer(Topic, String, String)
Session.createSharedDurableConsumer(Topic, String)
Session.createSharedDurableConsumer(Topic, String, String)
JMSContext.createSharedConsumer(Topic, String)
JMSContext.createSharedConsumer(Topic, String, String)
JMSContext.createSharedDurableConsumer(Topic, String)
JMSContext.createSharedDurableConsumer(Topic, String, String)
如果您想要完整的 JMS 2 实现,我推荐ActiveMQ Artemis。