在 MQ 系列等 JMS 提供程序中触发监视器
Trigger Monitor in JMS Provider like MQ Series
在 Websphere MQ 中,我可以配置队列以在消息到达时触发应用程序。
这样我就可以拥有一个仅在需要时启动的应用程序,而我不必管理一个在该队列中等待消息的守护进程。
有关 here
的更多信息
是否有开源 JMS 提供程序提供此功能?
我尝试了 ActiveMQ,但它没有触发器。
qpid 没有类似 websphere-MQ 的监视器触发器功能。我知道 ActiveMQ 也没有,我怀疑其他 JMS 提供者也可能如此。但是,可以推出您自己的监视器触发器。
自制的监视器触发器将成为您必须管理的应用程序进程(尽管是轻量级的),但是管理实际的应用程序线程本身会更好吗?
要在 qpid 中实现监视器触发器:
JMS 规范定义了一个 asynchronous delivery mode. See section 4.5.2. So you should be able to do this with any JMS provider. An asynchronous listener 实现 javax.jms.MessageListener
接口。 onMessage()
方法需要实现,作为订阅队列中出现新消息时的回调函数。
假设主应用程序队列是mainQ
。您在浏览模式下为 mainQ
创建一个新的 MessageListener
- 以便实际上不使用来自 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
在 Websphere MQ 中,我可以配置队列以在消息到达时触发应用程序。
这样我就可以拥有一个仅在需要时启动的应用程序,而我不必管理一个在该队列中等待消息的守护进程。
有关 here
是否有开源 JMS 提供程序提供此功能?
我尝试了 ActiveMQ,但它没有触发器。
qpid 没有类似 websphere-MQ 的监视器触发器功能。我知道 ActiveMQ 也没有,我怀疑其他 JMS 提供者也可能如此。但是,可以推出您自己的监视器触发器。
自制的监视器触发器将成为您必须管理的应用程序进程(尽管是轻量级的),但是管理实际的应用程序线程本身会更好吗?
要在 qpid 中实现监视器触发器:
JMS 规范定义了一个 asynchronous delivery mode. See section 4.5.2. So you should be able to do this with any JMS provider. An asynchronous listener 实现 javax.jms.MessageListener
接口。 onMessage()
方法需要实现,作为订阅队列中出现新消息时的回调函数。
假设主应用程序队列是mainQ
。您在浏览模式下为 mainQ
创建一个新的 MessageListener
- 以便实际上不使用来自 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