Skip to content

enadim/spring-cloud-ribbon-extensions

Repository files navigation

❗Must Have❗ Enhance your micro-service testing, maintenance & overall development productivity.

Spring Cloud Ribbon Extensions is a set of load balancing rules that chooses which server to target. It comes with handy features for easy integration, configuration and customization.

Build Status Codecov Coverage Codacy

SonarCloud Reliability SonarCloud Security SonarCloud Squale SonarCloud Coverage SonarCloud Duplication

CoL Maven Central Javadocs

GitHub license GitHub issues GitHub network/members

Requirements 2.0.0

  • java 8
  • spring boot 1.5.x
  • spring cloud Daslton.

Requirements 2.x.x

  • java 8
  • spring boot 2.0.x
  • spring cloud Finchley

Compatibility

  • spring cloud netflix ribbon.
  • spring cloud netflix eureka.
  • spring cloud netflix zuul.
  • spring cloud netflix hystrix.
  • spring cloud openfeign.
  • spring and java executors.
  • spring stomp.
  • jms.

Features

Routing Rules.

Zone Affinity

@EnableRibbonZoneAffinity: Enables routing to the same zone: see the tests for concrete usage and configurations.

Designed mainly for micro-services that should calls others in the same zone.

Favorite Zone 💎

@EnableRibbonFavoriteZone: Enables routing to a favorite zone: see the tests for concrete usage and configurations.

Designed mainly for testing a micro-service among an existing micro-service architecture without disruption. This is the feature that triggered this project.

Strict Metadata Matcher

@EnableRibbonStrictMetadataMatcher: Enables routing to servers that have a set of metadata: see the tests for concrete usage and configurations.

Designed to target a specific micro-service that holds a point to point connection with an external system (like FIX,...)

Requires Eureka.

Dynamic Metadata Matcher 💎

@EnableRibbonDynamicMetadataMatcher: Enables routing against a dynamic key: see the tests for concrete usage and configurations.

Designed to target a specific micro-services that holds multiple point to point connections with many external systems (like FIX,...)

Requires Eureka.

Context Propagation 💎

@EnableContextPropagation: Enables sharing the execution context through all the micro-services: see the tests for concrete usage and configurations.

Designed to propagate the execution context across the micro-services architecture.

What does it support:

  • Transport: http, jms, stomp.
  • Async: java, spring, Hystrix.
  • Zuul

⚠️You should use only lower case key names (http header limitation).

Eureka:exclamation: Let's enter a world of easy development and testing with micro-service architecture.

  • Developers are able to deploy & debug their own micro-service and get back any request they have initiated disregarding the entry point and without being annoyed by the requests they have not initiated.
  • Deploying in multi region-and let our clients (that have no knowledge of eureka, ribbon, zuul) choose the zone they prefer to target.
  • And other things that I have not thought about...

Illustration

Setup

maven

<dependency>
  <groupId>com.github.enadim</groupId>
  <artifactId>spring-cloud-ribbon-extensions</artifactId>
  <version>2.0.0</version>
</dependency>

gradle

dependencies {
    compile 'com.github.enadim:spring-cloud-ribbon-extensions:2.0.0'
}

Contribution

Any help is welcome. 👌