Uploaded image for project: 'Camel'
  1. Camel
  2. CAMEL-10320

Provide a LeaderPolicy to ease the implementation of master/slave route/context

    XMLWordPrintableJSON

Details

    • New Feature
    • Status: Resolved
    • Major
    • Resolution: Fixed
    • None
    • 2.20.0
    • camel-core
    • Unknown

    Description

      I've been working on some master/slave RoutePolicy and I'm wondering
      if we can have a proper LeaderPolicy with a standardized
      implementation in Camel 3.0 so one has only to notify when a
      leadership is taken

      In addition it may be nice to have:

      • a support for Leader election from the CmelContext so the routes are
        started when the context become leader.
      • an option to warm-up routes or to keep them stopped while not leader

      Then we can also make it exposed in JMX so tooling are able to detect
      which are current master and slaves, and whatnot.

      Some possible DSL/EIP extensions:

      from("...")
          .routeId("myRoute")
          .master() 
              .group("my-group")
              .consulConfiguration("http://consul-node:8500")
              .end()
          . to(...)
      
      camelContext.setDefaultClusteredRouteConfiguration(
          ClusteredRouteConfiguration.builder()
              .withAction(ClusteredRouteAction.SUSPEND)
              .withHealtCheck(...)
              .consulConfiguration("http://consul-node:8500")
              .build()
      );
        
      // lookup the cluster configuration from the registry   
      from("clustered:file:/data")
          .routeId("data-files")
          .to(...)
      
      // lookup the cluster configuration from the registry  
      from("master:file:/share")
          .routeId("shared-files")
          .master()
              .configuration("...")
              .end()
          .to(...)
      
      <camelContext .../>
          <defaultMasterConfiguration/>
              <consulConfiguration url="" userName="" password=""/>
          <defaultMasterConfiguration/>
      
          <masterConfiguration id="master-1"/>
              <consulConfiguration url="" userName="" password=""/>
          <masterConfiguration/>
      
          <!-- 
              this route should pick up the default configuration 
          -->
          <route id="data-files">
              <from uri="master:file:/data"/>
              <to uri="..."/>
          <route>
      
         <!-- 
              this route should pick up the configuration named 
              master-1 and the master prefix should be optional.
          -->
         <route id="shared-files">
              <from uri="file:/shared"/>
              <master configurationRef="master-1"/>
              <to uri="..."/>
          <route>
      </camelContext>
      

      Attachments

        Issue Links

          Activity

            People

              dhirajsb Dhiraj Sureshkumar Bokde
              lb Luca Burgazzoli
              Votes:
              3 Vote for this issue
              Watchers:
              5 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: