作者: 
其实是很随意的一个举动,没想到会发生后面的故事。一个小时后,我收到了一封邮件:

这是一封来自中间件团队Dubbo负责人的邮件。当时感觉挺意外的,也很欣喜。中间件团队一直是我认为技术和影响力都很强的团队,如果可以加入该团队,是一个很好的机会。

于是接下来就是例行的投简历,面试流程。要吐槽下阿里的面试流程,前后历时快两个月了,一共有五轮,真的是持久战呀。面试的时候,面试官问了一些关于mini Dubbo的问题。结果还不错,很侥幸的通过了面试,正式加入中间件的Dubbo团队。后来听我的老板说,当初是因为对我的mini Dubbo项目感兴趣,才有了面试邀约。

iris

mini版Dubbo的项目地址为:https://github.com/vangoleo/iris-java。我给它取名为iris。

iris是一个轻量级,微内核加插件机制,基于Java的RPC框架。提供服务注册,发现,负载均衡,支持API调用,Spring集成和Spring Boot starter使用。

有如下特性:

  • 网络通信: Netty4。
  • 注册中心: 可扩展,已支持etcd。
  • 动态代理: byte-buddy。
  • 序列化: Protobuff(Protostuff)。
  • 可以脱离Spring,提供API调用。自己实现了IoC容器。
  • 集成Spring,提供XML,Java配置。
  • 提供Spring Boot Starter(开发该项目时,Dubbo官方还不支持Spring Boot Starter)。
  • 提供SPI机制,实现微内核加插件的架构。实现可扩展,开发者可以为iris开发组件,以插件的形式集成到iris中。插件的加载使用另一个微容器框架见coco项目。该项目fork于阿里的cooma。

说明:iris完全是我个人学习的项目,麻雀虽小,五脏俱全,涵盖了RPC框架的基本功能。它只是实现了从0到1,但是从1到100还有很多的事情需要去做。

如何使用

iris支持以下使用方式:

  • 原生API形式,不依赖Spring,非Spring项目也可以使用。
  • Spring配置方式,和Spring很好的集成。
  • Spring Boot配置方式,提供了一个spring boot starter,以自动配置,快速启动。

API使用

Iris核心代码不依赖Spring,可脱离Spring使用。
第一步:启动etcd注册中心
编写一个接口IHelloService

public interface IHelloService {     String hello(String name); }

第二步:编写一个IHelloService的实现

public class HelloService implements IHelloService {     @Override     public String hello(String name){         return "Hello, " + name;     } }

第三步:启动Server

IRegistry registry = new EtcdRegistry("http://127.0.0.1:2379"); RpcServer server = new RpcServer(registry)         .port(2017)         .exposeService(IHelloService.class,new HelloService()); server.run();

第四步:启动client

RpcClient client = new RpcClient(registry); IHelloService helloService = client.create(IHelloService.class); String s = helloService.hello("leo"); System.out.println(s);