Giter Club home page Giter Club logo

spring-cloud-gateway's Issues

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.

Metrics

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

JDBC routes repository

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

[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:

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

Messaging support

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

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 ;) )

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.

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

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.

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.

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.