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