我很新WSO2 ESB我有一個實現具有此特定行爲的自定義消息處理器:執行操作後,從消息存儲中檢索元素,並在執行與此消息處理器相關的序列之前。如何爲自定義消息處理器實現自定義SamplingService?在此之後檢索元素並在執行序列之前
我試着詳細解釋它。
這是我的ESB消息處理器定義:
<?xml version="1.0" encoding="UTF-8"?>
<!---<messageProcessor class="org.apache.synapse.message.processor.impl.sampler.SamplingProcessor" messageStore="transferFromMessageStore" name="transferFromMessageProcessor" xmlns="http://ws.apache.org/ns/synapse">-->
<messageProcessor class="com.mycompany.toolkit.messageprocessor.SamplingProcessorHeaderRateLimitation" messageStore="transferFromMessageStore" name="transferFromMessageProcessor" xmlns="http://ws.apache.org/ns/synapse">
<parameter name="sequence">transferProcessorSequence</parameter>
<parameter name="interval">1000</parameter>
<parameter name="is.active">true</parameter>
<parameter name="concurrency">1</parameter>
</messageProcessor>
它檢索某些元素(XML文檔)形成transferFromMessageStore(隊列),並且該對象傳遞到使用transferProcessorSequence.xml序列它。正如您在此時看到的,我已經實現了一個自定義消息處理器SamplingProcessorHeaderRateLimit,它簡單地擴展了WSO2類的org.apache.synapse.message.processor.impl.sampler.SamplingProcessor。此時它僅在執行init()方法時顯示日誌。我將它部署在我的Carbon服務器上,並且工作正常。
Here你可以找到整個項目代碼。
好,但是從我所瞭解,以獲得所需的行爲我沒有簡單地延長SamplingProcessor類,因爲爲了做到每封郵件的消費和調度的序列之間的自定義實現,需要擴展類SamplingService類,這個one。
我認爲我需要重寫的execute()或取(的MessageConsumer msgConsumer)。
此時應該還可以插入日誌,每次從消息存儲中檢索元素並在此之前執行與消息處理器相關的序列時,都會寫入日誌文件。
可能嗎?
所以我的主要主杜省是:
1)有我創建擴展SamplingService類在同一個項目中,我實現我的自定義消息處理器(此行爲的類必須使用僅用於我的WSO2 ESB項目中的特定消息處理器,此項目中使用的所有其他消息處理器必須使用標準SamplingService實現)。
2)另一個疑問是關於如何將此自定義SamplingService實現傳遞給我的自定義消息處理器。進入SamplingProcessor WSO2類(如何將特定的自定義消息處理器實現與處理其生命週期的自定義SamplingService實現關聯)。
2問題爲什麼不重寫com.mycompany.toolkit.messageprocessor.SamplingProcessorHeaderRateLimitation中的getTask方法(它保護了modifer),並返回自己的類來擴展SamplingService? – simar
@simar你什麼意思?在這個時候,我已經覆蓋了getTask()方法,只是簡單地把它放在log \ println消息中(僅用於測試puropose)。問題是我從來沒有獲得這個輸出到我的日誌文件(相反,我獲得init()方法日誌)。所以在我看來,這個getTask()方法從來沒有執行的原因。你有一些關於它的想法嗎?也許是受保護的修飾符? – AndreaNobili
調用log.info()僅在您正確配置爲在文件中可見的日誌中可見。調用System.out.println只在控制檯中可見。你是否嘗試在控制檯模式下運行並在getTask方法中查找println消息?您是否嘗試在調試模式下運行wsoesb並嘗試調試以查看發生了什麼問題 – simar