2015-12-14 7 views
5

Nach meiner Erfahrung in der Arbeit mit Nachrichtenbrokern hat RabbitMq eine bessere Leistung unter schweren Lasten. Aus Gründen der Einfachheit ist es jedoch besser, AtiveMQ im Browser zu verwenden. Ich möchte wissen, ob es möglich ist, beide gleichzeitig zu verwenden?
Darüber hinaus gibt es eine Möglichkeit für mich, eine Nachricht mit ActiveMQ im Browser senden und die gleiche Nachricht mit RabbitMQ auf der Serverseite erhalten? Ich würde mich freuen, wenn mir jemand einen nützlichen Beispielcode vorschlagen würde.Verwendung von ActiveMQ und RabbitMQ gleichzeitig

+1

erstellen 'service', die von' ActiveMQ' liest und schreibt auf 'RabbitMQ' ... Ich kann nicht schwer sein, oder? – nafas

+4

Was meinen Sie mit "im Browser"? Sie führen ActiveMQ nicht in einem Browser aus. – nos

+0

@nafas Lassen Sie mich das an einem Beispiel verdeutlichen. Manchmal muss ich in meinem Projekt eine Nachricht im Browser senden oder empfangen. Daher ist es für mich besser, ActiveMQ als Nachrichtenbroker von Ajax zu verwenden, das von ActiveMQ unterstützt wird. Aber wenn es um Prozesse mit mehr als 5000 Transaktionen pro Sekunde geht, hat RabbitMQ eine bessere Leistung. Folglich muss ich beide gleichzeitig verwenden. Nun möchte ich wissen, ob es möglich ist, beide in meinem Projekt zu verwenden. Gibt es außerdem die Möglichkeit, eine Nachricht mit RabbitMQ auf dem Server zu senden und diese im Browser von ActiveMQ zu empfangen. –

Antwort

1

ActiveMQ kann AMQP 1.0 sprechen, RabbitMQ kann AMQP 1.0 mit dieser plug-in sprechen. Sie könnten eine Brücke mit diesem Protokoll erstellen.

Aber Lesen Sie Ihre Frage, ich denke, Sie brauchen ActiveMQ nicht. Um die Nachricht an den Browser zu senden, können Sie webstomp plugin verwenden.

+1

>> Ich würde mich freuen, wenn mir jemand einen nützlichen Beispielcode vorschlagen würde. << Ihre Antwort ist nicht sehr nützlich. – AdamSkywalker

+0

Nach welcher Art von Code suchen Sie? mit 'amqp' können Sie eine Brücke senden/empfangen. Mit 'stomp' können Sie die Nachricht mit' JS' senden und empfangen. – Gabriele

+0

Alle Beispiele oder Tipps zur Bridge-Implementierung. Ich habe mit rabbitmq gearbeitet und kann mir immer noch nichts vorstellen, aber ein Java-Client, der Nachrichten weiterleiten wird. (fühlt sich aber ineffizient an) – AdamSkywalker

1

Was Sie versuchen, ist ein Brückenmuster zu implementieren. Obwohl die JMS-Bridges in der Regel erstellt wurden, um einen Mechanismus zwischen JMS-Nachrichtenanbietern bereitzustellen, kann das Integrationsmuster auch für Kabelprotokolle verwendet werden.

Also, wenn Sie versuchen, Nachrichten zwischen ActiveMQ senden - RabbitMQ hier die möglichen Optionen:

1) ActiveMQ - Defacto JMS-Unterstützung, AMQP, STOMP auch 2 unterstützt wird) RabbitMQ - Defacto STOMP Unterstützung, AMQP ist auch zusammen mit anderen gängigen Draht Protokolle wie MQTT unterstützt

Also, wenn es darum geht, zu überbrücken Möglichkeiten:

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

Bei den Optionen für die erste und zweite Brücke ist der einfachste Weg die Implementierung eines Apache QPID-Clients.

Alternativ für die meisten robusten Konfigurationen, ist es besser, als Spring Integration Channel oder Camel Route zu implementieren.

Hier ist ein Ausschnitt auf, wie dies acheive mit Frühlings-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> 

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

Verwandte Themen