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

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

    Details

    • Type: New Feature
    • Status: Resolved
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: None
    • Fix Version/s: 2.20.0
    • Component/s: camel-core
    • Labels:
    • Estimated Complexity:
      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

              • Assignee:
                dhirajsb Dhiraj Bokde
                Reporter:
                lb Luca Burgazzoli
              • Votes:
                3 Vote for this issue
                Watchers:
                6 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: