在Websphere MQ中,我可以配置队列以在消息到达时触发应用程序
通过这种方式,我可以拥有一个只在需要时启动的应用程序,而且我不需要管理一个等待该队列中的消息的守护进程。
有关here
是否有一个带有此功能的开源JMS提供程序?
我尝试过ActiveMQ,但它没有触发器。
答案 0 :(得分:1)
qpid没有类似于websphere-MQ的监视器触发器功能。我知道ActiveMQ也没有,我怀疑其他JMS提供商也可能如此。但是,可以推出自己的监视器触发器。
自制的监视器触发器将成为您必须管理的应用程序进程(虽然轻巧轻量级),您最好还是管理实际的应用程序线程吗?
JMS规范定义了asynchronous delivery mode. See section 4.5.2。因此,您应该可以使用任何JMS提供程序执行此操作。 asynchronous listener实现javax.jms.MessageListener
接口。需要实现方法onMessage()
,并在订阅的队列中出现任何新消息时充当回调函数。
假设主应用程序队列为mainQ
。您在浏览模式下为MessageListener
创建新的mainQ
,以便不实际使用来自mainQ的任何消息
Destination mainQ = (Destination) session.createQueue("mainQ; {mode: browse}");
MessageConsumer mainQConsumer = session.createConsumer(mainQ);
mainQConsumer.setMessageListener(this);
在onMessage()
功能中,您可以在单独的triggerQ
中创建新邮件,也可以跳过此步骤直接启动应用程序。
public void onMessage(Message message)
{
TextMessage triggerMessage = session.createTextMessage("Trigger-start-Application-X");
Destination triggerQ = (Destination) session.createQueue("triggerQ");
triggerQProducer = session.createProducer(triggerQ);
this.triggerQProducer.send(triggerMessage);
// Or alternatively:
// if (!applicationIsActive()) activateApplication()
}
请在此处查看完整的工作示例:https://github.com/foragerr/qpid-trigger-demo