1.介绍及使用方式
Pigeon是一个分布式服务通信框架(RPC),在美团点评内部广泛使用,是美团点评最基础的底层框架之一。和阿里的Dubbo类似,在微服务的场景下,提供高性能和透明得如同本地化调用的RPC调用服务。有以下特点:
-
除了支持spring schema等配置方式,也支持代码annotation方式发布服务、引用远程服务,并提供原生api接口的用法。
-
支持netty通信,也支持http协议,方便非java应用调用pigeon的服务。
-
使用zookeeper实现服务注册及发现,使用Curator管理Zookeeper的相关操作。
-
序列化方式除了hessian,还支持thrift等。
-
提供了服务器单机控制台pigeon-console,包含单机服务测试工具。
-
创新的客户端路由策略,提供服务预热功能,解决线上流量大的service重启时大量超时的问题。
-
记录每个请求的对象大小、返回对象大小等监控信息。
-
服务端可对方法设置单独的线程池进行服务隔离,可配置客户端应用的最大并发数进行限流。
配置使用方法如下:
- 定义服务:
定义服务接口: (该接口需单独打包,在服务提供方和调用方共享);
package com.dianping.pigeon.demo; public interface EchoService { public String echo(String name); }
-
在服务提供方实现接口:(对服务调用方隐藏实现)。
package com.dianping.pigeon.demo.provider; import com.dianping.pigeon.demo.EchoService; public class EchoServiceImpl implements EchoService { public String echo(String name) { return "Hello " + name; } }
服务提供方Spring配置声明暴露服务:
<bean class="com.dianping.pigeon.remoting.provider.config.spring.ServiceBean" init-method="init"> <property name="services"> <map> <entry key="http://service.dianping.com/demoService/echoService_1.0.0" value-ref="echoServiceImpl" /> </map> </property> <property name="port"> <value>5008</value> </property> </bean>
-
服务调用方通过配置引用远程服务
<bean id="echoService" class="com.dianping.pigeon.remoting.invoker.config.spring.ReferenceBean" init-method="init"> <!-- 服务全局唯一的标识url,默认是服务接口类名,必须设置 --> <property name="url" value="http://service.dianping.com/demoService/echoService_1.0.0" /> <!-- 接口名称,必须设置 --> <property name="interfaceName" value="com.dianping.pigeon.demo.EchoService" /> <!-- 超时时间,毫秒ÿ