【问题标题】:JMS + Spring Integration + ActiveMQ ! Not working on JVM but working on activeMQ serverJMS + Spring 集成 + ActiveMQ !不在JVM上工作,但在activeMQ服务器上工作
【发布时间】:2012-08-31 05:05:53
【问题描述】:

在代理 url 到 JVM 的地方创建连接工厂

<!--tcp://localhost:61616-->
<bean id="connectionFactoryActiveMQ" class="org.apache.activemq.ActiveMQConnectionFactory">
    <property name="brokerURL" value="vm://localhost"/>
    <property name="useAsyncSend" value="true"/>
</bean>

创建单个连接工厂,因为需要一个连接

<bean id="connectionFactory" class="org.springframework.jms.connection.SingleConnectionFactory">
    <property name="targetConnectionFactory" ref="connectionFactoryActiveMQ"/>
</bean>

创建主题目标,因为需要实现一些类

<bean id="destination" class="org.apache.activemq.command.ActiveMQTopic">
    <property name="physicalName" value="TEST"/>
</bean>

生成 jmsTemplate 对象

<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
    <property name="connectionFactory" ref="connectionFactory"/>
    <property name="defaultDestination" ref="destination"/>
    <property name="pubSubDomain" value="true"/>
</bean>



My classes who receive messages
<bean id="messageListener1" class="com.aimrposoft.jms.server.Server"/>
<bean id="messageListener2" class="com.aimrposoft.jms.server.Server1"/>
<bean id="messageListener3" class="com.aimrposoft.jms.server.Server2"/>

Generate message class
<bean id="producer" class="com.aimrposoft.jms.client.Producer"/>



<!--<bean id="jmsContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer">-->
<!--<property name="connectionFactory" ref="connectionFactory"/>-->
<!--<property name="destination" ref="destination"/>-->
<!--<property name="messageListener" ref="messageListener1"/>-->
<!--</bean>-->


<jms:listener-container
        connection-factory="connectionFactory" destination-type="topic" acknowledge="transacted">
    <jms:listener destination="TEST" ref="messageListener1" method="onMessage" subscription="subscription"/>
    <jms:listener destination="TEST" ref="messageListener2" method="onMessage" subscription="subscription"/>
    <jms:listener destination="TEST" ref="messageListener3" method="onMessage" subscription="subscription"/>

</jms:listener-container>

当我使用 vm://localhost 消息侦听器无法正常工作,但如果我运行 activeMQ 并将代理 URL 更改为 tcp://localhost:61616,则一切正常。

【问题讨论】:

    标签: java spring jvm jms activemq


    【解决方案1】:

    我认为您缺少启动嵌入式代理的配置,您是否也可以尝试将其添加到您的配置中:

    <amq:broker id="activeMQBroker">
        <amq:transportConnectors>
            <amq:transportConnector uri="vm://localhost" />
        </amq:transportConnectors>
    </amq:broker>
    

    amq 命名空间前缀可以这样定义:

    xmlns:amq="http://activemq.apache.org/schema/core"
    

    【讨论】:

    • 问题没有解决。有时有效,有时不像以前那样有效
    【解决方案2】:

    为了进一步 Biju 的回答,我使用队列而不是主题,这是我的 spring 配置,它看起来工作得很好(62999 只是一个随机的可用端口号):

        <amq:broker useJmx="false" persistent="false">
        <amq:transportConnectors>
            <amq:transportConnector uri="tcp://localhost:62999" />
        </amq:transportConnectors>
    </amq:broker>
    
    <bean id="rawConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
        <property name="brokerURL" value="vm://localEmbeddedBroker" />
    </bean>
    
    <bean id="connectionFactory" class="org.springframework.jms.connection.CachingConnectionFactory">
        <property name="targetConnectionFactory" ref="rawConnectionFactory" />
        <property name="sessionCacheSize" value="30" />
        <property name="cacheProducers" value="true" />
        <property name="cacheConsumers" value="false" />
    </bean>
    

    【讨论】:

      猜你喜欢
      • 2014-08-23
      • 2022-12-13
      • 1970-01-01
      • 2019-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-02
      相关资源
      最近更新 更多