2015-12-14 21 views
5

Message Brokers ile çalışmayla ilgili deneyimime göre, RabbitMq ağır yükler altında daha iyi bir performansa sahiptir. Ancak, basitlik uğruna, tarayıcıda AtiveMQ kullanmak daha iyidir. İkisini de aynı anda kullanmanın mümkün olup olmadığını bilmek istiyorum?
Ayrıca, tarayıcıda ActiveMQ kullanarak bir mesaj göndermek ve sunucu tarafında RabbitMQ kullanarak aynı mesajı almak için herhangi bir yolu var mı? Herhangi biri bana yararlı bir örnek kod önerdiğinde memnun olurum.ActiveMQ ve RabbitMQ'yi aynı anda kullanma

+1

ActiveMQ' 'dan okur ve RabbitMQ'' yazar bir 'hizmet' oluşturmak ... Zor olamayacağım mı? – nafas

+4

"Tarayıcıda" ile ne demek istiyorsun? ActiveMQ'yi bir tarayıcıda çalıştırmazsınız. – nos

+0

@nafas Bir örnekle açıklayayım. Bazen projemde tarayıcımda bir mesaj göndermem veya almam gerekiyor. Yani, ActiveMQ tarafından desteklenen bir Ajax tarafından bir mesaj komisyoncusu olarak ActiveMQ kullanmak benim için daha iyidir. Ancak, saniyede 5000'den fazla işlem içeren işlemler söz konusu olduğunda, RabbitMQ daha iyi bir performansa sahiptir. Sonuç olarak, ikisini de aynı anda kullanmam gerekiyor. Şimdi, her ikisini de projemde kullanmanın mümkün olup olmadığını bilmek istiyorum. Ayrıca, sunucuda RabbitMQ ile bir mesaj göndermem ve tarayıcıda ActiveMQ ile almam mümkün. –

cevap

1

ActiveMQ, AMQP 1.0'ı konuşabilir, RabbitMQ, bu plug-in'u kullanarak AMQP 1.0'ı konuşabilir. Bu protokolü kullanarak bir köprü oluşturabilirsiniz.

Ama Sorunuzu okumak, bence ActiveMQ'ye ihtiyacınız yok. Mesajı tarayıcıya göndermek için webstomp plugin'u kullanabilirsiniz.

+1

>> Herhangi biri bana yararlı bir örnek kod önerdiğinde memnun olurum. << Cevabınız çok kullanışlı değil. – AdamSkywalker

+0

Ne tür bir kod arıyorsunuz? 'amqp' ile bir köprü gönderebilir/alabilirsiniz. 'stomp' ile' JS' kullanarak mesajı gönderebilir ve alabilirsiniz. – Gabriele

+0

herhangi bir örnek veya köprü uygulamasıyla ilgili ipuçları. Rabbitmq ile çalıştım ve hala hiçbir şey hayal edemiyorum, ama mesajları tekrar iletecek bir java istemcisi. (yine de verimsiz hissediyor) – AdamSkywalker

1

Yapmaya çalıştığınız şey bir köprü deseni uygulamaktır. Artık JMS köprüleri, JMS mesaj sağlayıcıları arasında bir mekanizma sağlamak üzere tipik olarak oluşturulmuş olmasına rağmen, Entegrasyon paterni de tel protokolleri için kullanılabilir. Eğer ActiveMQ arasında mesaj göndermeye çalışıyorsanız

Yani - RabbitMQ burada potansiyel seçenekleri bulunuyor:

1) ActiveMQ - Defacto STOMP desteği, AMQP olduğunu - Defacto JMS desteği, AMQP, STOMP da 2) RabbitMQ desteklenmektedir Ayrıca MQTT gibi diğer popüler tel protokolleri ile birlikte destekli

yüzden köprü seçenekleri söz konusu olduğunda:

a) [1] JMS - [2] STOMP (ya da) AMQP b) [1] AMQP (veya) STOMP - [2] AMQP (veya) STOMP

1'inci ve 2. köprü seçeneklerinde, uygulamanın en kolay yolu bir Apache QPID istemcisi kullanmaktır.

Alternatif olarak en sağlam yapılandırmalar için, bir Bahar Entegrasyon Kanalı veya bir Deve Rotası olarak uygulanması daha iyidir.

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

Madde Kaynak:

Burada Bahar Entegrasyonu ile bu modernleşmek için nasıl bir parçacık İşte http://integrationsphere.blogspot.co.uk/2012/03/bridging-between-jms-and-rabbitmq-amqp.html