广播调用所有提供者,逐个调用,任意一台报错则报错。通常用于通知所有提供者更新缓存或日志等本地资源信息。
<dubbo:service cluster="broadcast" />
或
<dubbo:reference cluster="broadcast" />
public class BroadcastClusterInvoker<T> extends AbstractClusterInvoker<T> { private static final Logger logger = LoggerFactory.getLogger(BroadcastClusterInvoker.class); public BroadcastClusterInvoker(Directory<T> directory) { super(directory); } @Override @SuppressWarnings({"unchecked", "rawtypes"}) public Result doInvoke(final Invocation invocation, List<Invoker<T>> invokers, LoadBalance loadbalance) throws RpcException { checkInvokers(invokers, invocation); RpcContext.getContext().setInvokers((List) invokers); RpcException exception = null; Result result = null; // 广播到所有的被调用实例 for (Invoker<T> invoker : invokers) { try { result = invoker.invoke(invocation); } catch (RpcException e) { // 记录异常 exception = e; logger.warn(e.getMessage(), e); } catch (Throwable e) { // 记录异常 exception = new RpcException(e.getMessage(), e); logger.warn(e.getMessage(), e); } } // 只要有一个实例有异常则报错 if (exception != null) { throw exception; } return result; } }
原文:
https://blog.csdn.net/u011642663/article/details/81950410
Dubbo 的集群容错模式:Broadcast Cluster(广播模式)
原文:https://www.cnblogs.com/loserCoder/p/14379210.html