同时使用ActiveMQ和RabbitMQ

时间:2015-12-14 13:01:53

标签: java rabbitmq activemq messagebroker

根据我与消息经纪人合作的经验,RabbitMq在重负载下具有更好的性能。但是,为简单起见,最好在浏览器中使用AtiveMQ。我想知道是否可以同时使用它们? 此外,有什么方法可以让我在浏览器中使用ActiveMQ发送消息,并在服务器端使用RabbitMQ接收相同的消息? 如果有人建议我提供有用的示例代码,我将不胜感激。

2 个答案:

答案 0 :(得分:1)

ActiveMQ可以说AMQP 1.0,RabbitMQ可以使用此plug-in说AMQP 1.0。 您可以使用此协议创建桥接器。

阅读您的问题,我认为您不需要ActiveMQ。 要将消息发送到浏览器,您可以使用webstomp plugin

答案 1 :(得分:1)

您要做的是实现桥接模式。现在虽然JMS桥通常是 为了在JMS消息提供者之间提供机制,Integration模式也可以用于有线协议。

因此,如果您尝试在ActiveMQ之间发送消息 - RabbitMQ,这里有潜在的选择:

1)ActiveMQ - Defacto JMS支持,AMQP,STOMP也受支持 2)RabbitMQ - Defacto STOMP支持,AMQP也支持其他流行的有线协议,如MQTT

所以当涉及到桥接选项时:

a)[1] JMS - [2] STOMP(或)AMQP b)[1] AMQP(或)STOMP - [2] AMQP(或)STOMP

对于第1和第2桥选项,最简单的实现方法是使用Apache QPID客户端。

或者对于最强大的配置,最好将其实现为Spring Integration Channel或Camel Route。

以下是有关如何使用Spring Integration实现此功能的片段:

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

    <beans:bean id="jmsQueueConnectionFactory"
      class="org.springframework.jndi.JndiObjectFactoryBean">
        <beans:property name="jndiTemplate">
            <beans:ref bean="jndiTemplate"/>
        </beans:property>
        <beans:property name="jndiName">
            <beans:value>ConnectionFactory</beans:value>
        </beans:property>
    </beans:bean>

    <!-- Channels and adapters for SI -->

    <int-jms:message-driven-channel-adapter connection-factory="jmsQueueConnectionFactory" destination-name="myJmsQueue" channel="rabbitChannel"/>
      <channel id="rabbitChannel"/>
    <int-amqp:outbound-channel-adapter channel="rabbitChannel" exchange-name="fromJmsExchange" amqp-template="rabbitTemplate"/>

    <!-- Connectivity to Rabbit -->

    <rabbit:template id="rabbitTemplate" connection-factory="cf"/>
    <rabbit:connection-factory id="cf" host="localhost"/>

    <!-- Rabbit entities, to be created at context startup -->

    <rabbit:admin connection-factory="cf"/>
     <rabbit:queue name="fromJMS"/>
     <rabbit:direct-exchange name="fromJmsExchange">
        <rabbit:bindings>
            <rabbit:binding queue="fromJMS"/>
        </rabbit:bindings>
     </rabbit:direct-exchange>

文章来源:http://integrationsphere.blogspot.co.uk/2012/03/bridging-between-jms-and-rabbitmq-amqp.html