簡體   English   中英

像MQ系列一樣在JMS Provider中觸發監視器

[英]Trigger Monitor in JMS Provider like MQ Series

在Websphere MQ中,我可以配置隊列以在消息到達時觸發應用程序。
這樣,我可以擁有一個僅在需要時啟動的應用程序,而不必管理一個等待該隊列中消息的守護程序。
有關此處的更多信息

是否有提供此功能的開源JMS提供程序?

我嘗試過ActiveMQ,但沒有觸發。

qpid沒有像監視器觸發觸發功能那樣的websphere-MQ。 我知道ActiveMQ也不是,我懷疑其他JMS提供程序也可能如此。 但是,有可能推出您自己的監視器觸發。

自制監視器觸發將成為您必須管理的應用程序進程(盡管輕巧),您會更好地管理實際的應用程序線程本身嗎?


要在qpid中實現監視器觸發器:

JMS規范定義了異步交付模式。 參見第4.5.2節 因此,您應該可以使用任何JMS提供程序來執行此操作。 異步偵聽器實現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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM