【问题标题】:Spring + JMS + ActiveMQ without dependency on ActiveMQSpring + JMS + ActiveMQ 不依赖 ActiveMQ
【发布时间】:2014-05-13 13:13:30
【问题描述】:

我正在尝试构建一个向 ActiveMQ 队列发送消息的 MQ 生产者。问题是我不希望实现特定于 ActiveMQ。我实际上是在开发环境中进行 ActiveMQ 发送,而在生产中,应用程序服务器将使用其他东西。我打算使用 Maven 创建 2 个配置文件,它们将根据给定的配置文件过滤资源。

我开始使用 JNDI,但我被卡住了……我尝试了很多选择,但没有一个可行。 目前,我的 spring config xml 是这样的:

<jee:jndi-lookup id="mqConnectionFactory" jndi-name="java:comp/env/jms/mqConnectionFactory" />

<bean id="jmsJndiTemplate" class="org.springframework.jndi.JndiTemplate">
    <property name="environment">
        <props>
            <prop key="java.naming.factory.initial">org.apache.activemq.jndi.ActiveMQInitialContextFactory</prop>
            <prop key="java.naming.provider.url">vm://localhost</prop>
        </props>
    </property>
</bean>

<bean id="ismeJmsTemplate" class="org.springframework.jms.core.JmsTemplate">
    <property name="defaultDestination" ref="ismeJmsDestination"/>
    <property name="connectionFactory" ref="mqConnectionFactory"/>
</bean>

<bean id="ismeJmsDestination" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiTemplate" ref="jmsJndiTemplate"/>
    <property name="jndiName" value="dynamicQueues/FOO.BAR"/>
</bean>

mqConnectionFactory 找不到,因为我没有在 JNDI 中添加它。我不知道如何实际添加它,因为这不是 webapp,所以没有 context.xml。

有人可以帮助我朝着正确的方向前进吗?

【问题讨论】:

    标签: spring maven jms activemq spring-jms


    【解决方案1】:

    无论您选择何种代理实现,您的类路径中都需要有相应的客户端库。 JMS API 只是一个 API,您需要一个实际的实现来连接到您选择的代理。

    假设您想连接到开发中的 ActiveMQ 和生产中的任何 JMS 实现。您可以在 separate profiles 中隔离这两个配置,并在 Maven 中将 activeMQ 依赖项设置为 optional dependency。

    【讨论】:

    • 谢谢,我会看看你给我的链接!我不受依赖级别的限制。所以我可以将依赖项添加到 ActiveMQ。例如,在使用“本地”配置文件构建时,我只需要向 ActiveMQ 发送消息。当不使用“本地”配置文件构建时,将消息发送到 JNDI 配置的队列(企业 weblogic 队列)。
    猜你喜欢
    • 2021-05-27
    • 2014-08-23
    • 2013-08-01
    • 2014-12-24
    • 2012-09-15
    • 2023-03-03
    • 2019-11-13
    • 2015-12-01
    • 2011-01-20
    相关资源
    最近更新 更多