Customized Handler Sample

ServiceComb support users to define a customized handler and and invoke the handler in handler chain.

  • Customize a handler by implement Handler interface, for example:

    public class MyHandler implements Handler {
      private static final Logger LOGGER = LoggerFactory.getLogger(MyHandler.class);
      @Override
      public void handle(Invocation invocation, AsyncResponse asyncResponse) throws Exception {
        //code before
        LOGGER.info("It's my handler! \r\n");
        invocation.next(response -> {
          // code after
          asyncResponse.handle(response);
        });
      }
    }
    
  • Define handler id and class in cse.handler.xml config item under resources/config directory

    <config>
        <handler id="myhandler" 		     class="org.apache.servicecomb.samples.customerhandler.handlers.MyHandler" />
    </config>
    
    

    NOTICE: can use a different name other than cse.handler.xml, e.g. userDefined.hanlder.xml

  • Configure customized MyHandler in microservice.yaml file along with other handler together

    servicecomb:
      # other configurations omitted
      handler:
        chain:
          Consumer:
            default: bizkeeper-consumer,loadbalance, myhandler
    

Precondition

see Precondition

Sample Quick Start

  1. Start the ServiceComb/Service Center

servicecomb:
 service:
   registry:
     address: http://127.0.0.1:30100		#service center address
  1. Start the custom-handler-provider service

    • Start provider service by maven

      Compile the source code, and use mvn exec to execute the main class CustomHandlerProviderMain.

      mvn clean install
      cd custom-handler-sample/custom-handler-provider/
      mvn exec:java -Dexec.mainClass="org.apache.servicecomb.samples.customerhandler.provider.CustomHandlerProviderMain"
      
    • Start provider service by IDE

      Import the project by InteliJ IDEA or Eclipse, then find main function CustomHandlerProviderMain of provider service and RUN it like any other Java program.

  2. Start the custom-handler-consumer service

    Just like how to start custom-handler-provider service. But the main class of custom-handler-consumer service is CustomHandlerCustomerMain.

    cd custom-handler-sample/custom-handler-consumer
    mvn exec:java -Dexec.mainClass="org.apache.servicecomb.samples.customerhandler.consumer.CustomHandlerCustomerMain"
    
  3. How to verify On the producer side, the output should contain the following stuffs if the producer starts up successfully:

    1. ‘swagger: 2.0 info: version: 1.0.0 ...’ means the producer generated swagger contracts
    2. ‘rest listen success. address=0.0.0.0:8080’ means the rest endpoint is listening on port 8080

    On the consumer side, you can see the following outputs:

    1. ‘It’s my handler!' means custom handler had take effect