2017-02-24 22 views
1

我已經到了ibm站點,但是我無法找到使用觸發器的實際邏輯。我們如何在IBM MQ中使用觸發器?

我已經完成了下面的代碼,但是如何從觸發器接收到暗示?

public void setTrigger() 
     { 
     try{ 
      Queue = QMGR.accessQueue(queueName, (MQC.MQOO_INQUIRE+MQC.MQOO_SET)); 
      Queue.setTriggerControl(1); 
      Queue.setTriggerType(2); 
      } 
     catch(Exception e){ 
      System.out.println("------------------------"); 
      System.out.println("trigger method"); 
      System.out.println("------------------------"); 
      System.out.println(e); 
      System.out.println("************************"); 
      } 
     } 

無論什麼時候發出信息,我該如何得到暗示。

+0

觸發用於允許MQ觸發過程中要消耗的消息。在某些情況下,觸發類型要求應用程序將隊列設置回TRIGGER狀態,這就是您發佈的代碼看起來像是在嘗試執行的操作。 – JoshMc

+0

您是否希望讓MQ實際啓動一個Java進程來使用隊列中的消息? – JoshMc

+0

是的,只要我有隊列中的消息,我想啓動一個java進程來使用隊列中的消息。 – Fresher

回答

4

首先,不要通過應用程序進行觸發設置。這是浪費時間。

其次,閱讀&瞭解這些MQ網頁:

三,Java應用程序,創建一個批處理文件或Unix腳本設置任何環境變量即CLASSPATH並在PROCESS的APPLICID字段中設置批處理文件或Unix腳本。第四,在爲隊列和進程執行MQSC定義之後,不要忘記啓動觸發器監視器(否則將不會觸發任何操作)。第五,如果你設置了第一觸發器的觸發器類型,那麼確保觸發的應用程序在退出之前從隊列中讀取每一條消息。

六,觸發(觸發優先)僅適用於消息之間存在較大間隙或突發消息之間存在較大差距的情況。如果你每秒或2秒收到消息,那麼觸發是不好的,因爲應用程序啓動,每秒或2秒退出進程&。並且如果它是Java應用程序,則將始終具有JVM加載時間。

第七,如果你真的想要什麼消息回調(異步),而不是MQ觸發然後去閱讀:Asynchronous consumption of IBM MQ messages

+0

比較回退計數和回退閾值以確保正在檢索的消息不是毒藥,還是可取的嗎? – cschneid

+0

是和有毒消息​​應放到應用程序退出隊列而不是系統的死信隊列中。 – Roger