Giter Club home page Giter Club logo

spring-cloud-gateway's Introduction

Spring Cloud Connectors

Spring Cloud Connectors provides a simple abstraction that JVM-based applications can use to discover information about the cloud environment on which they are running, connect to services, and have discovered services registered as Spring beans. It provides out-of-the-box support for discovering common services on Heroku and Cloud Foundry cloud platforms, and it supports custom service definitions through Java Service Provider Interfaces (SPI).

Note
This project is in maintenance mode, in favor of the newer Java CFEnv project. We will continue to release security-related updates but will not address enhancement requests.

Learn more

Build

The project is built with Gradle. The Gradle wrapper allows you to build the project on multiple platforms and even if you do not have Gradle installed; run it in place of the gradle command (as ./gradlew) from the root of the main project directory.

To compile the project and run tests

./gradlew build

To build a JAR

./gradlew jar

To generate Javadoc API documentation

./gradlew api

To list all available tasks

./gradlew tasks

Contributing

Spring Cloud is released under the non-restrictive Apache 2.0 license, and follows a very standard Github development process, using Github tracker for issues and merging pull requests into master. If you want to contribute even something trivial please do not hesitate, but follow the guidelines below.

Sign the Contributor License Agreement

Before we accept a non-trivial patch or pull request we will need you to sign the Contributor License Agreement. Signing the contributor’s agreement does not grant anyone commit rights to the main repository, but it does mean that we can accept your contributions, and you will get an author credit if we do. Active contributors might be asked to join the core team, and given the ability to merge pull requests.

Code of Conduct

This project adheres to the Contributor Covenant code of conduct. By participating, you are expected to uphold this code. Please report unacceptable behavior to [email protected].

Code Conventions and Housekeeping

None of these is essential for a pull request, but they will all help. They can also be added after the original pull request but before a merge.

  • Use the Spring Framework code format conventions. If you use Eclipse you can import formatter settings using the eclipse-code-formatter.xml file from the Spring Cloud Build project. If using IntelliJ, you can use the Eclipse Code Formatter Plugin to import the same file.

  • Make sure all new .java files to have a simple Javadoc class comment with at least an @author tag identifying you, and preferably at least a paragraph on what the class is for.

  • Add the ASF license header comment to all new .java files (copy from existing files in the project)

  • Add yourself as an @author to the .java files that you modify substantially (more than cosmetic changes).

  • Add some Javadocs and, if you change the namespace, some XSD doc elements.

  • A few unit tests would help a lot as well — someone has to do it.

  • If no-one else is using your branch, please rebase it against the current master (or other target branch in the main project).

  • When writing a commit message please follow these conventions, if you are fixing an existing issue please add Fixes gh-XXXX at the end of the commit message (where XXXX is the issue number).

spring-cloud-gateway's People

Contributors

abelsromero avatar albertoimpl avatar altus34 avatar bijukunjummen avatar dennis-menge avatar dependabot[bot] avatar dlsrb6342 avatar eacdy avatar fitzoh avatar fombico avatar glenacota avatar gsealy avatar ilozano2 avatar making avatar marcingrzejszczak avatar martamedio avatar nkonev avatar olgamaciaszek avatar robertmcnees avatar ryanjbaxter avatar spencergibb avatar spring-builds avatar spring-operator avatar thirunar avatar tommas1988 avatar tony-clarke-amdocs avatar tysewyn avatar violetagg avatar weizibin avatar wilder avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

spring-cloud-gateway's Issues

Update mvnw to 3.5.0

distributionUrl=https://repo1.maven.org/maven2/org/apache/maven/apache-maven/3.5.0/apache-maven-3.5.0-bin.zip

Aggregation Gateway Pattern / Batch request / multipart request

This is a feature request.

The Aggregation Gateway Pattern describes some kind of multi-request endpoint. Example:

Instead of calling GET http://gateway/foo and GET http://gateway/bar as two separate requests, there is an endpoint which can take a single request which contains multiple requests, processes them, and then returns a single response which contains the aggregated responses.

Maybe it's possible to implement this using multipart/mixed (which is basically the same as multipart/form-data but with slightly different semantics).

I'm not sure whether this already exists or if it's necessary at all when using HTTP/2.

Spring MVC/Servlet implementation

Would probably need a Servlet implementation of ServerWebExchange so that predicates and filters can be reused.

This was a bad idea, though I tried.

Consider project name

My Top Choices

  • Conduit
  • Hub
  • Gateway

My Next Choices

  • Interchange
  • Junction
  • Influx
  • Ingress
  • Jetway
  • Onramp

Other Choices

  • Airlock
  • Passage (way)
  • Pipe
  • Turnstile
  • Highway
  • Router
  • Convergence

Metrics

Determine what metrics could be useful and define a strategy for exporting them using boots metrics apis

Messaging support

A Route locator that looks up queues from kafka or the like and sends messages to the broker.

Allow modification of the response body

Hi,

I need to modify the body of both the request and the response (encryption/decryption).
As I see it, I can create a filter that sets a ServerHttpRequestDecorator in the exchange and override the getBody method, but I didn't find a way to do the same with the response. The WriteResponseFilter is the first filter and consequently the exchange used is the original exchange.
Would it be possible to add a ResponseBodyHandler interface to allow modifying the response body? Or did I overlook something?

Thanks in advance.

[Discussion] UI aggregator / gateway / fragment service

First at all that project seems really promising, far better then Zuul 1 version!

Last day I was talking with @dsyer about designing/prototyping a kind of layout service / ui composition service (whatever the name) inspired from Zalando Tailor project (from global Mosaic project - Microservices for the Frontend).

Goal of such service is to avoid getting a well designed and decoupled backend service used by a big monster monolith (SPA?) frontend. Each microservices could be responsible on their own frontend/ui fragments, layout service / ui composition service will be only responsible to aggregate every fragments using a base/master template and returns it.

diagram16

I wanted to develop by myself a kind of closely inspired fork to Zalando Tailor but using Java + Spring 5 + Spring Boot 2.0 + Reactor. Though I really need such piece of service on my current stack, at start that project was also a good candidate for training myself to Spring 5 + Spring Boot 2.0 + Reactor.

When I spoke that to @dsyer I also proposed an possible architecture based on Zalando one

diagram

And mine (Yes is a totally a clone of Zalando one :trollface: )(Attention is a prototype, any box is not necessary a dedicated services. Is more a logical view)

page-service2

At this point, @dsyer ask me why I have separated gateway and layout service. I don't really have a clear answer but in my mind, only reasons was separation of concerns and resilience (if layout service get down, you can continue using API). But I didn't think more.

That why I open you an issue (is more a discussion, I'm not asking feature request) to

  1. Have your feedback to such service in microservices/cloud architecture
  2. Your point about integrating it inside gateway or should be a dedicated services


Existing alternative or similar project to Zalando Tailor

Here some sources of inspirations about Microservices for Frontend topic:

Unable to set default filters via configuration properties

In M1 it does not appear to be possible to add a default filter via configuration properties.
Given the following configuration:

spring:
  cloud:
    gateway:
      default-filters:
       - name: filter1
       - name: filter2

with a breakpoint on GatewayProperties::getDefaultFilters I always end up with a single RemoveNonProxyHeadersWebFilterFactory filter which is added via GatewayProperties::loadDefaults.

I can verify that filter1 and filter2 are being created by setting breakpoints in the constructor.

JDBC routes repository

Seems there is only memory based implementation now, would be great if it supports persistable repository.

Fail on client Error

Hi,

As it is, the default behaviour is to fail on client error (ie if the underlying service response is 4xx, the gateway will return a 500 Http error).

I had to modify the org.springframework.cloud.gateway.filter.NettyRoutingFilter class and add failOnClientError(false) to the HttpClientRequest creation (l.79).

I think the failOnClentError(false) should be the default behaviour (transparent gateway), or at least configurable.

Thanks for this awesome project, I'm looking forward to using it ( if you have an ETA, I'd be very pleased ;) )

Add more filters

  • Add Request Header
  • Add Response Header
  • Set Request Header
  • Set Response Header
  • Remove Request Header
  • Remove Response Header
  • Rewrite Path
  • Set Path
  • Redirect To
  • Set HTTP Status
  • Hystrix
  • Ribbon (Via Spring Cloud LoadBalancerClient)
  • Set Query Param
  • Remove Query Param (Might take a PR in spring-framework, would make AddRequestParameter easier).
  • Request Size
  • Compress
  • Spring Retry
  • CORS
  • Tee (ala unix tee): send one request to two places, ignoring one response from skipper
  • Rate Limiting: token-bucket, rolling-rate-limiter (NodeJS/Redis), GCRA go, GCRA Java or here zuul-throttle filter
  • Simian Army Filters (latency, random text, bandwidth limits) #64
  • Versioning?

Add more predicates

  • Cookie
  • Header
  • Host
  • Method
  • Query
  • URL
  • After Date/Time
  • Before Date/Time
  • Between Date/Time
  • Source IP

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.