2017-07-19 75 views
0

我很新WSO2 ESB我試圖做一些初步的實驗,建立一個自定義消息處理器。我基本上創建了一個項目,我在其中定義了一個擴展抽象類的類。這是一個非常簡單的實驗,所以在這個時候我只重寫一些方法在裏面放一些日誌。爲什麼日誌在我的WSO2自定義消息處理器實現中不起作用?

看來我的應用程序可以正常工作,而且這個自定義消息處理器被使用了,我無法讀取插入的日誌到我的wso2carbon.log日誌文件中。

我必須這樣做:

1)我創建了一個新的Maven項目,我用這個的pom.xml文件應符合要求建立一個自定義消息處理器:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.mycompany.toolkit</groupId> 
    <artifactId>SamplingProcessorHeaderRateLimitation</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <packaging>bundle</packaging> 
    <name>Sampling Processor Header Rate Limitation</name> 
    <description>Custom Sampling Mesageprocessor using response header to implement the rate limitation</description> 
    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <version>2.0</version> 
       <configuration> 
        <source>1.7</source> 
        <target>1.7</target> 
       </configuration> 
      </plugin> 
      <plugin> 
       <groupId>org.apache.felix</groupId> 
       <artifactId>maven-bundle-plugin</artifactId> 
       <version>2.3.4</version> 
       <extensions>true</extensions> 
       <configuration> 
        <instructions> 
         <Bundle-SymbolicName>com.mycompany.toolkit.messageprocessor</Bundle-SymbolicName> 
         <Bundle-Name>com.mycompany.toolkit.messageprocessor</Bundle-Name> 
         <Export-Package>com.mycompany.toolkit.*</Export-Package> 
         <DynamicImport-Package>*</DynamicImport-Package> 
         <Implementation-Build>${buildNumber}</Implementation-Build> 
         <Scm-Root>${project.scm.connection}</Scm-Root> 
        </instructions> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 
    <repositories> 
     <repository> 
      <releases> 
       <updatePolicy>daily</updatePolicy> 
       <checksumPolicy>ignore</checksumPolicy> 
      </releases> 
      <id>wso2-nexus</id> 
      <url>http://maven.wso2.org/nexus/content/groups/wso2-public/</url> 
     </repository> 
    </repositories> 
    <pluginRepositories> 
     <pluginRepository> 
      <releases> 
       <updatePolicy>daily</updatePolicy> 
       <checksumPolicy>ignore</checksumPolicy> 
      </releases> 
      <id>wso2-nexus</id> 
      <url>http://maven.wso2.org/nexus/content/groups/wso2-public/</url> 
     </pluginRepository> 
    </pluginRepositories> 
    <dependencies> 
     <dependency> 
      <groupId>org.apache.synapse</groupId> 
      <artifactId>synapse-core</artifactId> 
      <version>2.1.7-wso2v3</version> 
     </dependency> 
     <dependency> 
      <groupId>commons-logging</groupId> 
      <artifactId>commons-logging</artifactId> 
      <version>1.1.1</version> 
     </dependency> 
    </dependencies> 
    <properties> 
     <CApp.type>lib/synapse/mediator</CApp.type> 
    </properties> 
</project> 

2)然後,我創建了這個SamplingProcessorHeaderRateLimitation這是我的自定義消息處理器實現和擴展SamplingProcessor WSO2消息處理器類:

package com.mycompany.toolkit.messageprocessor; 

import java.util.Map; 

import org.apache.commons.logging.Log; 
import org.apache.commons.logging.LogFactory; 
import org.apache.synapse.SynapseException; 
import org.apache.synapse.core.SynapseEnvironment; 
import org.apache.synapse.message.processor.impl.ScheduledMessageProcessor; 
import org.apache.synapse.message.processor.impl.sampler.SamplingProcessor; 
import org.apache.synapse.message.processor.impl.sampler.SamplingProcessorView; 

public class SamplingProcessorHeaderRateLimitation extends SamplingProcessor { 

    private static final Log logger = LogFactory.getLog(ScheduledMessageProcessor.class.getName()); 
    private SamplingProcessorView view; 

    @Override 
    public void init(SynapseEnvironment se) { 
     super.init(se); 

     logger.info("init() START"); 
     System.out.println("init() START"); 

     try { 
      view = new SamplingProcessorView(this); 
     } catch (Exception e) { 
      throw new SynapseException(e); 
     } 

     // register MBean 
     org.apache.synapse.commons.jmx.MBeanRegistrar.getInstance().registerMBean(view, 
       "Message Sampling Processor view", getName()); 

     logger.info("init() END"); 
     System.out.println("init() END"); 
    } 

    @Override 
    public void setParameters(Map<String, Object> parameters) { 
     logger.info("setParameters() START"); 
     System.out.println("setParameters() START"); 
     // TODO Auto-generated method stub 
     super.setParameters(parameters); 

     logger.info("setParameters() END"); 
     System.out.println("setParameters() END"); 
    } 
} 

正如你看到的,我重寫了一些方法,如的init()(因爲我認爲這是一次進行的,但什麼時候?)和setParameters()(出於同樣的原因)。

正如你可以看到我嘗試使用日誌記錄器實例,但也使用簡單的System.out.println()把日誌。

我建立它生成jar文件,我上傳這個罐子裏面WSO2 EI管理面板:ESB文物 - >添加

然後我想在我的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> 

正如你可以看到我所代替標準org.apache.synapse.message .processor.impl.sampler.SamplingProcessor消息處理器(以前由此ESB應用程序使用)與我的自定義消息處理器(com.mycompany.toolkit.messageprocessor.SamplingProcessorHeaderRateLimitation)。

我的應用程序似乎正常工作(所以我認爲這是使用這種自定義消息處理器,我希望它),但是插入初始化日誌()setParameters()方法不是印入我的日誌文件(wso2carbon.log)。

爲什麼?問題是什麼?我錯過了什麼?

我檢查日誌之後,我打電話給我的WSO2 ESB API,所以我只能看到在調用API之後發生了什麼(我在日誌上做了一個unix尾部)。

可能是因爲這兩個被覆蓋的方法僅在Carbon服務器啓動時或部署ESB應用程序時執行?

最終可以覆蓋哪些消息處理器方法來測試日誌? (我的意思是每次我的自定義消息處理器執行其相關序列時調用的方法)

回答

1

我認爲它執行一次,但是什麼時候? - 初始化過程中,我認爲這種情況發生,當你編輯一些MessageProcessor的,按保存按鈕,你會發現像

[2017-07-20 13:45:41,477] [] INFO - ScheduledMessageProcessor Started message processor. [meneriade] 

有關記錄

logger.info("init() START"); 

你檢查log4j.properties?您確實有定製包名

package com.mycompany.toolkit.messageprocessor; 
相關問題