JMS 客户端需要哪些 HornetQ 库?

Posted

技术标签:

【中文标题】JMS 客户端需要哪些 HornetQ 库?【英文标题】:Which HornetQ libraries i need for JMS client? 【发布时间】:2012-10-26 03:12:40 【问题描述】:

我有一个独立的 hornetq 服务器和一个使用它的 JMS 客户端!关于 hornetq 用户手册,我应该只将 jnp-client.jarjms.jar 添加到客户端类路径中。但是当我尝试使用 hornetq 服务器(生产和消费消息)时,抛出了几个 ClassNotFoundExceptions,所以我强制将这些 jar 文件添加到我的客户端类路径中:

1.杰姆斯 2. jnp-客户端 3. hornetq-jms-client 4.网络 5. hornetq-core-cilent 6. jboss-common

我是在使用 Hornetq 核心客户端而不是 jms 客户端吗? jms 客户端 我真正需要什么 jar 文件?

我的 applicationContext.xml:

<!-- JndiTemplate -->
<bean id="jndiTemplate" class="org.springframework.jndi.JndiTemplate">
        <property name="environment">
            <props>
                <prop key="java.naming.factory.initial">org.jnp.interfaces.NamingContextFactory</prop>
                <prop key="java.naming.factory.url.pkgs">org.jboss.naming:org.jnp.interfaces</prop>
                <prop key="java.naming.provider.url">jnp://localhost:1099</prop>
            </props>
        </property>
</bean>

<!-- Connection Factory -->
<bean id="hornetqConnectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean">
        <property name="jndiTemplate" ref="jndiTemplate"/>
        <property name="jndiName" value="/ConnectionFactory" />
</bean>

<!-- Destionation -->
<bean id="annotationDeleteCommandDestination" class="org.springframework.jndi.JndiObjectFactoryBean">
        <property name="jndiTemplate" ref="jndiTemplate"/>
        <property name="jndiName" value="/queue/command/annotation/deleteQueue" />
</bean>

<!-- Message Listener -->
<bean id="annotationMessageHandler" class="command.messaging.handler.annotation.AnnotationMessageHandler">
        <property name="annotationService" ref="annotationService"/>
</bean>

<!-- Message Listener Container -->
<bean id="annotationDeleteCommandMsgListenerContainer"
      class="org.springframework.jms.listener.DefaultMessageListenerContainer" 
      p:connectionFactory-ref="hornetqConnectionFactory"
      p:destination-ref="annotationDeleteCommandDestination"
      p:cacheLevelName="CACHE_CONSUMER"
      p:messageListener-ref="annotationDeleteCommandMessageHandler"
      p:concurrentConsumers="10"
      p:maxConcurrentConsumers="50"
      p:receiveTimeout="5000"
      p:idleTaskExecutionLimit="10
      p:idleConsumerLimit="5" />

<!-- Message Producer -->
<bean id="messageSender" class="command.messaging.sender.MessageSender">
        <property name="connectionFactory" ref="hornetqConnectionFactory" />
</bean>

【问题讨论】:

【参考方案1】:

HornetQ-JMS-Client 是 HornetQ-Core-Client 的适配器,它公开了 JMS API。 所以你需要他们两个。

而且 HornetQ-Core-Client 内部需要 netty,所以你也需要那个。

不确定 jboss-common。您需要一些日志记录依赖项,但我不记得具体是哪一个。

请注意,与 SOAP 不同,JMS 是一种 API,而不是协议。应用程序的其余部分独立于 API 提供者,但您需要正确的客户端库来理解您的 JMS 服务器使用的自定义协议。因此,例如,您不能使用 HornetQ JMS 客户端连接到 ActiveMQ。

【讨论】:

除非您想在客户端 ala jboss 样式上进行日志记录配置,否则您不需要客户端上的 jboss-loggins。 他也在使用 spring.. 我不确定他需要 spring 的哪些依赖项。【参考方案2】:

根据文档...

如果您只使用纯 HornetQ Core 客户端(即没有 JMS),那么您需要 hornetq-core-client.jar、hornetq-commons.jar 和 netty.jar。

如果您在客户端使用 JMS,那么您还需要包含 hornetq-jms-client.jar 和 jboss-jms-api.jar。

这些是指独立 hornetq 下载的 lib 目录中的文件。

我也需要添加 jnp-client.jar 以避免 CNF。

【讨论】:

以上是关于JMS 客户端需要哪些 HornetQ 库?的主要内容,如果未能解决你的问题,请参考以下文章

HornetQ JMS 主题到主题桥

将 JMS 客户端连接到 Apache Kafka

需要大消息的 HornetQ 配置帮助

独立 Hornetq 机器上带有 jms 队列的 Jboss

使用 Jms 发送对象 - HornetQ(性能问题)[关闭]

Mule ESB HornetQ JMS 消息未传递