Forest 是基於 Java 開發的輕量級 RPC 框架,除點對點調用外,還提供服務治理:節點自動發現/摘除、高可用、負載均衡。架構包含三大角色:
forest-common:基礎工具forest-rpc:核心 RPC 實現forest-demo:示例代碼<bean id="methodConfig" class="...MethodConfig">
<property name="compressType" value="None"/>
<property name="serializeType" value="Fastjson"/>
<property name="timeout" value="5000"/>
</bean>
<bean id="sampleServiceProxy" class="...ForestProxyFactoryBean">
<property name="serviceInterface" value="...SampleService"/>
<property name="methodConfigMap">
<map>
<entry key="echo" value-ref="methodConfig"/>
<entry key="say" value-ref="methodConfig"/>
</map>
</property>
</bean>
SampleService service = Forest.from(SampleService.class,
ServiceProviderConfig.Builder.newBuilder()
.withMethodConfig("say", MethodConfig.Builder.newBuilder()
.withCompressType(CompressType.None)
.withSerializeType(SerializeType.Fastjson).build())
.withMethodConfig("echo", ...).build());
@HystrixCommand(groupKey="ExampleGroup", commandKey="HelloWorld",
threadPoolKey="HelloWorldPool", fallbackMethod="sayFallback")
public String say(String str) { return remoteServiceRef.say(str); }
public String sayFallback(String str) { return "sayFallBack:" + str; }
啟用 http.server.start=true,即可在方法上使用 @Path、@GET、@Produces 等註解暴露 HTTP 端點。
Hessian2 序列化下,Win64 8G 內存達 8 萬+ TPS,其他場景均 3 萬+ TPS。尚有優化空間。
源碼地址:forest,歡迎貢獻。