(1). 概述

在这一节,仍然把:StandaloneGateway的创建过程给剖析完毕,这一小节,主要剖析:BrokerClient.

(2). StandaloneGateway.createBrokerClient

private BrokerClient createBrokerClient(final GatewayCfg config) {
	return new BrokerClientImpl(
		config,
		// *********************************************************
		// MessagingService是atomix基于Netty组件之上,进行一消息处理器
		// *********************************************************
		atomixCluster.getMessagingService(),
		// *********************************************************
		// ClusterMembershipService主要用于获取成员列表,呆会会扔出相关的API出来
		// *********************************************************
		atomixCluster.getMembershipService(),
		// *********************************************************
		// ClusterEventService是集群事件服务,是atomix为集群的机器提供通信的一个组件,主要用于广播以及订阅信息
		// *********************************************************
		atomixCluster.getEventService(),
		// *********************************************************
		// ActorScheduler在上一小节剖析过了,他主要是两组线程池(CPU密集型和IO密集型)
		// *********************************************************
		actorScheduler,
		false);
}

(3). BrokerClient接口

public interface BrokerClient extends AutoCloseable {
	// 发送请求
	<T> CompletableFuture<BrokerResponse<T>> sendRequest(BrokerRequest<T> request);
	
	// 发送请求,并附加上超时
	<T> CompletableFuture<BrokerResponse<T>> sendRequest(BrokerRequest<T> request, Duration requestTimeout);
	
	// 发送请求,并重试
	<T> CompletableFuture<BrokerResponse<T>> sendRequestWithRetry(BrokerRequest<T> request);
	
	// 发送请求,并重试,并附加上超时
	<T> CompletableFuture<BrokerResponse<T>> sendRequestWithRetry(BrokerRequest<T> request, Duration requestTimeout);
	
	<T> void sendRequestWithRetry(BrokerRequest<T> request,BrokerResponseConsumer<T> responseConsumer,Consumer<Throwable> throwableConsumer);
	
	// 获取Broker集群信息
	BrokerTopologyManager getTopologyManager();
	
	// 没太看明白这是啥 
	void subscribeJobAvailableNotification(String topic, Consumer<String> handler);
}	

(4). 总结

根据BrokerClient接口的能力,就能知道这个类主要用于向Broker发送请求来着的,具体的子类是如何实现的,暂时不太关心,因为,我的主要任务是:找到Gateway(Netty解码[GRPC对HTTP2进行解码的关键])接收请求,转发请求给Broker才是关键.