Ekibimin uygulamalarından biri için kuyruğa alma çözümleri araştırıyorum. İdeal olarak, hem hafif, hem de süreç içi aracı olarak (iş parçacıkları arasında düşük verimli mesajlaşma için) ve harici bir aracı olarak yapılandırılabilen bir şey isteriz. Orada yapabileceğiniz bir MQ sunucusu var mı? Çoğu, harici bir varlık olarak kurulum gerektiriyor gibi görünüyor. ZeroMQ bir süreç içi çözüm için en yakın gelmek gibi görünüyor, ama daha fazla "steroidler UDP soket" gibi görünüyor ve güvenilir teslimat gerekir.Java işlemine gömülü çalışabilen herhangi bir MQ sunucusu var mı?
cevap
ActiveMQ
'un ZeroMQ
'dan biraz daha ağır olduğunu söylediğimiz gibi, gömülü bir işlem olarak çok işe yarar. Burada, Spring
ve ActiveMQ
ile basit bir örnek.
sıra test etmek için kullanılacak mesaj dinleyici:
public class TestMessageListener implements MessageListener {
private static final Logger logger = LoggerFactory.getLogger(TestMessageListener.class);
@Override
public void onMessage(Message message) {
/* Receive the text message */
if (message instanceof TextMessage) {
try {
String text = ((TextMessage) message).getText();
System.out.println("Message reception from the JMS queue : " + text);
} catch (JMSException e) {
logger.error("Error : " + e.getMessage());
}
} else {
/* Handle non text message */
}
}
}
ActiveMQ
bağlam konfigürasyonu:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="jmsQueueConnectionFactory" class="org.apache.activemq.spring.ActiveMQConnectionFactory">
<property name="brokerURL">
<value>tcp://localhost:61617</value>
</property>
</bean>
<bean id="pooledJmsQueueConnectionFactory" class="org.apache.activemq.pool.PooledConnectionFactory" destroy-method="stop">
<constructor-arg ref="jmsQueueConnectionFactory" />
</bean>
<bean id="queueDestination" class="org.apache.activemq.command.ActiveMQQueue">
<constructor-arg value="messageQueue" />
</bean>
<bean id="jmsQueueTemplate" class="org.springframework.jms.core.JmsTemplate">
<constructor-arg ref="pooledJmsQueueConnectionFactory" />
<property name="pubSubDomain" value="false"/>
</bean>
<bean id="testMessageListener" class="com.example.jms.TestMessageListener" />
<bean id="messageQueuelistenerContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<property name="connectionFactory" ref="pooledJmsQueueConnectionFactory" />
<property name="destination" ref="QueueDestination" />
<property name="messageListener" ref="testMessageListener" />
<property name="concurrentConsumers" value="5" />
<property name="acceptMessagesWhileStopping" value="false" />
<property name="recoveryInterval" value="10000" />
<property name="cacheLevelName" value="CACHE_CONSUMER" />
</bean>
</beans>
JUnit
testi:
@ContextConfiguration(locations = {"classpath:/activeMQ-context.xml"})
public class SpringActiveMQTest extends AbstractJUnit4SpringContextTests {
@Autowired
private JmsTemplate template;
@Autowired
private ActiveMQDestination destination;
@Test
public void testJMSFactory() {
/* sending a message */
template.convertAndSend(destination, "Hi");
/* receiving a message */
Object msg = template.receive(destination);
if (msg instanceof TextMessage) {
try {
System.out.println(((TextMessage) msg).getText());
} catch (JMSException e) {
System.out.println("Error : " + e.getMessage());
}
}
}
}
bağımlılıklar eklemek pom.xml
:
<!-- Spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jms</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<!-- ActiveMQ -->
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-all</artifactId>
<version>5.6.0</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-pool</artifactId>
<version>5.6.0</version>
</dependency>
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-core</artifactId>
<version>5.6.0</version>
</dependency>
Bu harika çalıştı, teşekkürler. –
ActiveMQ ile karşılaştığımız sorunlar (ve şu anda alternatifler için hızlı arama yapıyorum): (a) kapattığınızda, tüm dişleri durmuyor. (b) API'larının birçoğu, inşaat sırasında otomatik start hizmetlerini başlatırken, aynı zamanda start() gibi yöntemlere sahip olmak, API'yi açıklığa kavuşturmak ve muhtemelen (a) 'ya katkıda bulunmak. (c) daha çok senkronize blok ekleyerek, çok iş parçacıklı, çok sayıda iş parçacığı tarafından "düzeltildi". (d) özellikle keşif modunda kullanıldığında şüpheli güvenlik. (Pro-ipucu: ofisin etrafında eğlenceli zamanlar için haydut bir mesaj kuyruk sunucusu kurun!) – Trejkaz
WebSphere MQ istemcisi, multicast pub/sub gerçekleştirme kapasitesine sahiptir. Bu, bağlantıyı kurmak için bir kuyruk yöneticisi gerekli olsa da, kuyruk yöneticisini atlayan bir istemci-istemci yeteneği sağlar.
- 1. Herhangi bir python OpenID sunucusu var mı?
- 2. iphone'da herhangi bir açık kaynak web sunucusu var mı?
- 3. MAC için SMTP Sunucusu - Herhangi bir öneriniz var mı?
- 4. Yakalama MQ hata java
- 5. C# ile Gömülü FTP Sunucusu?
- 6. Herhangi bir IPMI simülatörü var mı?
- 7. PHP'nin http_build_query işlevinin herhangi bir Java karşılığı var mı?
- 8. Java Applet'leri için herhangi bir eklenti çerçevesi var mı?
- 9. Yerleştirilebilir herhangi bir basit Java FTP Server kütüphanesi var mı?
- 10. Küçük resimler için herhangi bir java kütüphanesi var mı?
- 11. SQL'i biçimlendirmek için herhangi bir java kütüphanesi var mı?
- 12. SqlJ'nin herhangi bir Java 8 destekli sürümü var mı?
- 13. Herhangi bir sprite koleksiyonunu bilen var mı?
- 14. Tomcat'e herhangi bir IIS eşdeğeri var mı?
- 15. Herhangi bir Java hash ağacı uygulaması mı?
- 16. JBoss gömülü MQ için deve rotası giriş uç noktası
- 17. MVC gömülü sistem GUI örnekleri var mı?
- 18. iOS'ta Android'in herhangi bir karşılığı var mı?
- 19. Moodle için herhangi bir API var mı?
- 20. Herhangi bir ücretsiz php tarayıcı var mı?
- 21. "Vurgulu" kodun herhangi bir yolu var mı?
- 22. Herhangi bir guava genel görünümü var mı?
- 23. Herhangi bir ccTalk kütüphanesi var mı?
- 24. Herhangi bir Clojure DSL var mı?
- 25. Herhangi bir FACEBOX alt türü var mı?
- 26. Herhangi bir standart silme functor var mı?
- 27. Herhangi bir GMP logaritma fonksiyonu var mı?
- 28. PLINQ'in herhangi bir faydası var mı?
- 29. Çevresinde herhangi bir ScalaConsole var mı?
- 30. Herhangi bir getNLMultibutton kitaplığı var mı?
ben http://ffmq.sourceforge.net/index (örneğin [ffmq] (http://stackoverflow.com/questions/2507536/lightweight-jms-broker cevapları ilginç bilgi içerdiğini düşünüyorum .html) öneri). ActiveMQ başka bir ağır aday olsa da, aynı zamanda gömülebilir. – fvu
Like @fvu, ActiveMQ'nun ZeroMQ'dan biraz daha ağır olduğunu ancak gömülü bir işlem olarak çok iyi çalıştığını söyledi. Ve eğer Bahar kullanıyorsanız, kurmak gerçekten çok kolay. –
ZeroMQ, güvenilir bir aktarım sağlayan TCP (UDP değil) üzerindeki diğer şeylerin arasında çalışır. Bununla birlikte, kalıcı bir kuyruğa başvuruyor musunuz? Yani diske destekli? –