The route service address in SOFARPC is abstracted into a processing chain, and is processed by each router. Like filter, SOFARPC provides the same extensibility for router.
@Extension(value = "customerRouter")
@AutoActive(consumerSide = true)
public class CustomerRouter extends Router {
@Override
public void init(ConsumerBootstrap consumerBootstrap) {
}
@Override
public boolean needToLoad(ConsumerBootstrap consumerBootstrap) {
return true;
}
@Override
public List<ProviderInfo> route(SofaRequest request, List<ProviderInfo> providerInfos) {
return providerInfos;
}
Create a extension file META-INF/services/sofa-rpc/com.alipay.sofa.rpc.client.Router
with the following content:
customerRouter=com.alipay.sofa.rpc.custom.CustomRouter
This file customized a CustomerRouter
, which takes effect in all consumers. The parameter ConsumerBootstrap
in init method is a wrapper class of the referenced service, and can get objects such as ConsumerConfig
, proxy class, and service address pool. needToLoad
indicates whether the Router is valid, and the route method is the method for filtering addresses.