this topic is related to https://github.com/apache/incubator-dubbo/pull/2228
What is the purpose of the change
Support tag router feature for dubbo.
some pain points
fact1: some applications changed at the same time in different branch,like
A,B,C.
fact2: some applications didn't change ,but deploy repeatedly??like D,E.
fact3: if a new feature need to be tested, all 5 application need to be
deployed.
fact4: isolation by feature is not friendly to parallel development.
use tag
fact: changed applications are incremental deployment
some cases
usage
consumer
RpcContext.getContext().setAttachment("request.tag","red");
i suggest you can use filter or SPI to set this attachment, notice that
RpcContext is bound to Thread.
provider
@Bean public ApplicationConfig applicationConfig() {
ApplicationConfig applicationConfig = new ApplicationConfig();
applicationConfig.setName("provider-book"); // instruct tag router
Map<String,String> parameters = new HashMap<>();
parameters.put(Constants.ROUTER_KEY, "tag");
applicationConfig.setParameters(parameters); return applicationConfig;
}
Brief changelog
add unit property for dubbo.xsd.
add TagRouter,TagRouterFactory.
add SPI statement for adding TagRouter automatically.
fix a small bug(may be not) in
org.apache.dubbo.registry.integration.RegistryDirectory#route??exclude runtime
routers, avoid to filter some runtime invokers.
Verifying this change
Here is more detail about Unit Test:
org.apache.dubbo.rpc.cluster.router.tag.TagRouterTest
I have verified that the unit test has been correct and passed.
Here is more detail about a Integration Test:
clone the repository
https://github.com/lexburner/Dubbo-Sample-TagRouter.git,can see the route tag
feature.
Follow this checklist to help us incorporate your contribution quickly and
easily:
Make sure there is a GITHUB_issue filed for the change (usually before you
start working on it). Trivial changes like typos do not require a GITHUB issue.
Your pull request should address just this issue, without pulling in other
changes - one PR resolves one issue.
Format the pull request title like [Dubbo-XXX] Fix UnknownException when host
config not exist #XXX. Each commit in the pull request should have a meaningful
subject line and body.
Write a pull request description that is detailed enough to understand what
the pull request does, how, and why.
Write necessary unit-test to verify your logic correction, more mock a little
better when cross module dependency exist. If the new feature or significant
change is committed, please remember to add integration-test in test module.
Run mvn clean install -DskipTests & mvn clean test-compile
failsafe:integration-test to make sure unit-test and integration-test pass.
If this contribution is large, please follow the Software Donation Guide.