当使用ActiveMQ5.x的连接工厂,而不是artemis的连接工厂时,java虚拟主题可以工作

qlvxas9a  于 2021-07-09  发布在  Java
关注(0)|答案(0)|浏览(199)

我正在将现有代码从使用activemq5.x迁移到使用artemis。使用时 org.apache.activemq.ActiveMQConnectionFactory ,我的虚拟主题使用者队列中包含发送到虚拟主题的消息。使用时 org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory ,他们没有。
使用activemq 5.x的连接工厂为虚拟主题工作的连接池配置为:

<bean id="jmsFactory" class="org.apache.activemq.jms.pool.PooledConnectionFactory" init-method="start" destroy-method="stop">
    <property name="connectionFactory">
        <bean class="org.apache.activemq.ActiveMQConnectionFactory">
            <property name="brokerURL" value="failover:${activemq.broker}" />
            <property name="userName"  value="${activemq.credentials.username}"/>
            <property name="password"  value="${activemq.credentials.password}"/>
        </bean>
    </property>
    <property name="maxConnections"                    value="${activemq.connectionPool.size}" />
    <property name="maximumActiveSessionPerConnection" value="${activemq.connectionPool.sessionsPerConnection}" />
</bean>

使用artemis的连接工厂不适用于虚拟主题的连接池配置为:

<bean id="jmsConnectionFactory" class="org.apache.activemq.jms.pool.PooledConnectionFactory" init-method="start" destroy-method="stop">
    <property name="connectionFactory">
        <bean class="org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory">
            <constructor-arg name="url"      value="${activemq.broker}"/>
            <constructor-arg name="user"     value="${activemq.credentials.username}"/>
            <constructor-arg name="password" value="${activemq.credentials.password}"/>
        </bean>
    </property>
    <property name="maxConnections"                    value="${activemq.connectionPool.size}" />
    <property name="maximumActiveSessionPerConnection" value="${activemq.connectionPool.sessionsPerConnection}" />
</bean>

对于虚拟主题,我的消费者是camel routes,生产者是spring的示例 JmsTemplate 班级。生产者被配置为产生模式中的主题 VirtualTopic.Foo ,并且消费者被配置为从模式中的camel端点消费 jms:queue:VirtualTopic.Foo::Consumer.MyApplication.VirtualTopic.Foo . 这个 jms camel组件配置为 jmsFactory 上面的豆子,还有 JmsTemplate 示例:

<bean id="jms" class="org.apache.camel.component.jms.JmsComponent">
    <property name="connectionFactory"  ref="jmsFactory"/>
    <property name="deliveryPersistent" value="${activemq.delivery.persistent}"/>
</bean>

理想的情况下,我可以使用阿耳特弥斯的 ActiveMQConnectionFactory . 是什么原因导致发送到虚拟主题的消息在使用时不能被分派到使用者队列?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题