2015-12-14 22 views
5

In base alla mia esperienza con i broker di messaggi, RabbitMq ha prestazioni migliori in caso di carichi pesanti. Tuttavia, per semplicità, è meglio utilizzare AtiveMQ nel browser. Voglio sapere se è possibile utilizzare entrambi contemporaneamente?
Inoltre, c'è un modo per me di inviare un messaggio usando ActiveMQ nel browser e ricevere lo stesso messaggio usando RabbitMQ sul lato server? Sarò grato se qualcuno mi suggerirà un utile codice di esempio.Uso simultaneo di ActiveMQ e RabbitMQ

+1

creare un 'service' che legge da' ActiveMQ' e scrive a 'RabbitMQ' ... Non posso essere duro vero? – nafas

+4

Cosa intendi con "nel browser"? Non si esegue ActiveMQ in un browser. – nos

+0

@nafas Vorrei spiegarlo più chiaramente con un esempio. A volte nel mio progetto ho bisogno di inviare o ricevere un messaggio nel browser. Quindi, è meglio per me usare ActiveMQ come broker di messaggi di Ajax che è supportato da ActiveMQ. Ma quando si tratta di processi con più di 5000 transazioni al secondo, RabbitMQ ha prestazioni migliori. Di conseguenza, ho bisogno di usarli entrambi allo stesso tempo. Ora, voglio sapere se è possibile utilizzarli entrambi nel mio progetto. Inoltre, c'è la possibilità per me di inviare un messaggio con RabbitMQ nel server e riceverlo tramite ActiveMQ nel browser. –

risposta

1

ActiveMQ può parlare AMQP 1.0, RabbitMQ può parlare AMQP 1.0 utilizzando questo plug-in. Si può creare un ponte usando questo protocollo.

Ma leggere la tua domanda, penso che non hai bisogno di ActiveMQ. Per inviare il messaggio al browser è possibile utilizzare webstomp plugin.

+1

>> Sarò felice se qualcuno mi suggerisce un utile codice di esempio. << La tua risposta non è molto utile. – AdamSkywalker

+0

Che tipo di codice stai cercando? con 'amqp' è possibile creare un ponte di invio/ricezione. con 'stomp' puoi inviare e ricevere il messaggio usando' JS'. – Gabriele

+0

qualsiasi esempio o suggerimento sull'implementazione del bridge. Ho lavorato con rabbitmq e non riesco ancora a immaginare nulla, ma un client java che trasmetterà nuovamente i messaggi. (comunque si sente inefficiente) – AdamSkywalker

1

Quello che stai cercando di fare è implementare un modello di ponte. Ora, sebbene i bridge JMS fossero tipicamente creati per fornire un meccanismo tra i provider di messaggi JMS, il pattern di integrazione può essere utilizzato anche per i protocolli wire.

Quindi, se si sta cercando di inviare messaggi tra ActiveMQ - RabbitMQ ecco le possibili opzioni:

1) ActiveMQ - sostegno Defacto JMS, AMQP, STOMP è anche supportato 2) RabbitMQ - sostegno Defacto STOMP, AMQP è anche sostenuto insieme ad altri protocolli di filo popolari come MQTT

Così, quando si tratta di opzioni bridging:

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

Nel caso delle opzioni di secondo e secondo ponte, il modo più semplice per implementare è utilizzare un client Apache QPID.

In alternativa per le configurazioni più robuste, è meglio implementare come un canale di integrazione Spring o una Camel Route.

Ecco un frammento su come raggiungere questo obiettivo con l'integrazione Primavera:

<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> 

Articolo Fonte: http://integrationsphere.blogspot.co.uk/2012/03/bridging-between-jms-and-rabbitmq-amqp.html