Search in sources :

Example 1 with ZoneDetector

use of org.apache.dubbo.rpc.ZoneDetector in project dubbo by alibaba.

the class ZoneAwareClusterInterceptor method before.

@Override
public void before(AbstractClusterInvoker<?> clusterInvoker, Invocation invocation) {
    RpcContext rpcContext = RpcContext.getContext();
    String zone = (String) rpcContext.getAttachment(REGISTRY_ZONE);
    String force = (String) rpcContext.getAttachment(REGISTRY_ZONE_FORCE);
    ExtensionLoader<ZoneDetector> loader = ExtensionLoader.getExtensionLoader(ZoneDetector.class);
    if (StringUtils.isEmpty(zone) && loader.hasExtension(DEFAULT_KEY)) {
        ZoneDetector detector = loader.getExtension(DEFAULT_KEY);
        zone = detector.getZoneOfCurrentRequest(invocation);
        force = detector.isZoneForcingEnabled(invocation, zone);
    }
    if (StringUtils.isNotEmpty(zone)) {
        invocation.setAttachment(REGISTRY_ZONE, zone);
    }
    if (StringUtils.isNotEmpty(force)) {
        invocation.setAttachment(REGISTRY_ZONE_FORCE, force);
    }
}
Also used : RpcContext(org.apache.dubbo.rpc.RpcContext) ZoneDetector(org.apache.dubbo.rpc.ZoneDetector)

Aggregations

RpcContext (org.apache.dubbo.rpc.RpcContext)1 ZoneDetector (org.apache.dubbo.rpc.ZoneDetector)1