分享一个让我进入阿里中间件的个人项目
作者:
其实是很随意的一个举动,没想到会发生后面的故事。一个小时后,我收到了一封邮件:
这是一封来自中间件团队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);