You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@servicecomb.apache.org by "Jimin Wu (Jira)" <ji...@apache.org> on 2020/05/22 09:16:00 UTC
[jira] [Updated] (SCB-1929) provide new mechanism: Filter
[ https://issues.apache.org/jira/browse/SCB-1929?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Jimin Wu updated SCB-1929:
--------------------------
Description:
currently, we have extensions:
# HttpClientFilter
# HttpServerFilter
# Handler
# ProducerInvokeExtension
and we hard code to invoke all the extensions:
# consumer:
## invoke all handlers
## invoke all HttpClientFilters
# producer:
## schedule to operation related executor
## invoke all HttpServerFilters
## invoke all handlers
PROBLEMS:
# all these extensions are about invocation, just have different prototype
# for consumer
## when a sync invocation failed, and want to retry, retry schedule is conflict to sync mechanism
# for producer
## qps-limiter should invoke before schedule, currently we hard code it
## if want to write reactive extension before schedule, to not care for controller method is sync or async, currently can not do it
## if executor is a real thread pool, and a reactive extension after schedule will break thread schedule plan, that maybe will cause block event loop
# exception convert only avaiable for controller method invoke, but all extensions exception need convert too
SOLUTION:
provide new mechanism: Filter, to unify all the extensions, and change main invocation process flow from hard code to by configuration
# prototype:
{code:java}
public @interface FilterMeta {
String name();
/**
*
* @return null for all transport
*/
String transport();
/**
*
* @return true to use same instance for each filter chain
*/
boolean shareable() default true;
}
public interface Filter {
CompletableFuture<Response> onFilter(Invocation invocation, FilterNode nextNode);
}
{code}
# configuration
{code:java}
servicecomb:
filter-chains:
defines:
consumer-v1: consumer-handlers, http-client-filters
producer-v1: schedule, http-server-filters, producer-handlers
consumer-v2: simple-load-balance
producer-v2: schedule
default-consumer: $consumer-v2
default-producer: $producer-v2
consumers:
ms-1: simple-retry, load-balance
producers:
ms-2: qps-limiter, $producer-v2
{code}
## free to pre-define multiple chains
## reference pre-define chain, and combine to new chain
## microservice scope chain
## schema or operation scope chain, if have requirements in the future
# invoke exception converter when throwing a exception for all filter
> provide new mechanism: Filter
> -----------------------------
>
> Key: SCB-1929
> URL: https://issues.apache.org/jira/browse/SCB-1929
> Project: Apache ServiceComb
> Issue Type: New Feature
> Components: Java-Chassis
> Reporter: Jimin Wu
> Assignee: Jimin Wu
> Priority: Major
> Fix For: java-chassis-2.1.0
>
>
> currently, we have extensions:
> # HttpClientFilter
> # HttpServerFilter
> # Handler
> # ProducerInvokeExtension
> and we hard code to invoke all the extensions:
> # consumer:
> ## invoke all handlers
> ## invoke all HttpClientFilters
> # producer:
> ## schedule to operation related executor
> ## invoke all HttpServerFilters
> ## invoke all handlers
>
> PROBLEMS:
> # all these extensions are about invocation, just have different prototype
> # for consumer
> ## when a sync invocation failed, and want to retry, retry schedule is conflict to sync mechanism
> # for producer
> ## qps-limiter should invoke before schedule, currently we hard code it
> ## if want to write reactive extension before schedule, to not care for controller method is sync or async, currently can not do it
> ## if executor is a real thread pool, and a reactive extension after schedule will break thread schedule plan, that maybe will cause block event loop
> # exception convert only avaiable for controller method invoke, but all extensions exception need convert too
>
> SOLUTION:
> provide new mechanism: Filter, to unify all the extensions, and change main invocation process flow from hard code to by configuration
> # prototype:
> {code:java}
> public @interface FilterMeta {
> String name();
> /**
> *
> * @return null for all transport
> */
> String transport();
> /**
> *
> * @return true to use same instance for each filter chain
> */
> boolean shareable() default true;
> }
> public interface Filter {
> CompletableFuture<Response> onFilter(Invocation invocation, FilterNode nextNode);
> }
> {code}
> # configuration
> {code:java}
> servicecomb:
> filter-chains:
> defines:
> consumer-v1: consumer-handlers, http-client-filters
> producer-v1: schedule, http-server-filters, producer-handlers
> consumer-v2: simple-load-balance
> producer-v2: schedule
> default-consumer: $consumer-v2
> default-producer: $producer-v2
> consumers:
> ms-1: simple-retry, load-balance
> producers:
> ms-2: qps-limiter, $producer-v2
> {code}
> ## free to pre-define multiple chains
> ## reference pre-define chain, and combine to new chain
> ## microservice scope chain
> ## schema or operation scope chain, if have requirements in the future
> # invoke exception converter when throwing a exception for all filter
>
>
--
This message was sent by Atlassian Jira
(v8.3.4#803005)