分布式服务治理框架dubbo
Dubbo最主要功能有两个
1 RPC调用
2 SOA服务治理方案
Dubbo的架构
Dubbo常见的注册中心有2中,zookeeper以及redis
这篇文章讲解的是采用的zookeeper,要求读者对zookeeper有一定的认识。
http://www.cnblogs.com/javabigdata/p/7491116.html zookeeper相关知识看这里
服务的提供者Provider将服务注册到Registry,
消费者Consumer需要从Registry中发现、监听到服务的变动
Provider需要运行在Container容器中
Monitor(监控中心) 主要是用来对服务的调用次数统计等。
以下主要是一个快速入门,怎么使用dubbo
我们需要创建多个项目
Provider (服务提供者) 包括实现类 一个项目,接口定义为一个项目
Consumer (服务消费者) 一个项目
这里我定义一个公用的pom项目来对maven依赖做一个统一的管理
整体项目采用maven构建,使用dubbox (2.8.4) ,并提供源码下载
======================================================================
test-parent (pom项目)主要定义jar版本信息
======================================================================
服务提供者接口定义(所谓的发布服务,就是将接口对外暴露,生产者和消费者都是需要引用接口的,所以在这里接口将在test-facade中提供)
这个项目主要是定义接口
主要代码如下
@Path("/userTestService") @Consumes({ MediaType.APPLICATION_JSON, MediaType.TEXT_XML }) @Produces({ ContentType.APPLICATION_JSON_UTF_8, ContentType.TEXT_XML_UTF_8 }) public interface IUserTestService { @GET User getUserTest(); @GET @Path("/testGet") public void testget(); }
注解代码说明:
@Path:代表服务的访问路径,如“user”,则访问路径为domain:port/context/user,在方法上注解是相对类上面的。依次展开路径即可。
@POST:服务请求的方式,支持POST、GET等。
@Consumes:表示将接收到的数据自动转换为什么格式的,支持json和xml。
@Produces:表示将结果返回时候输出为什么格式的,支持json和xml。
======================================================================
服务接口实现(一般来说,服务提供者我们使用注解开发)
部分代码如下
@Service @com.alibaba.dubbo.config.annotation.Service(interfaceClass = com.cc.facade.IUserTestService.class, protocol = { "rest", "dubbo" }) public class UserServImpl implements IUserTestService { @Override public User getUserTest() { User user = new User(); user.setId(1); user.setName("cc"); return user; } @Override public void testGet() { System.out.println("test=get"); } }
解释:
@com.alibaba.dubbo.config.annotation.Service 表示将该服务注册到dubbo上
dubbo-provider.xml 文件内容如下 ,
<!-- 引入配置文件 --> <context:property-placeholder location="classpath:config.properties" /> <dubbo:application name="${dubbox.application}" owner="programmer" organization="dubbox" /> <!-- zookeeper注册中心 --> <dubbo:registry address="${dubbox.registry.address}" timeout="100000" /> <!- dubbo service自动扫描 --> <dubbo:annotation package="com" /> <!-- kryo实现序列化 --> <dubbo:protocol name="dubbo" host="192.168.1.7" port="20883" serialization="kryo" optimizer="com.cc.serial.SerializationOptimizerImpl" /> <!-- 发布rest服务 --> <dubbo:protocol name="rest" host="192.168.1.7" server="${dubbox.rest.server}" port="${dubbox.rest.port}" contextpath="${dubbox.rest.contextpath}" threads="${dubbox.rest.threads}" accepts="${dubbox.rest.accepts}" /> </beans>
======================================================================
服务消费者(一般使用xml配置)
dubbo-provider.xml配置文件如下
<!-- 引入配置文件 --> <context:property-placeholder location="classpath:config.properties" /> <!-- 消费服务名称 --> <dubbo:application name="${dubbox.application}" owner="programmer" organization="dubbox" /> <!-- zookeeper注册中心 zookeeper://192.168.1.111:2181 --> <dubbo:registry address="${dubbox.registry.address}" timeout="30000" /> <!-- 扫描dubbox注解位置 --> <dubbo:annotation package="com.cc" /> <!-- kryo实现序列化 --> <dubbo:protocol name="dubbo" serialization="kryo" optimizer="com.cc.serial.SerializationOptimizerImpl" /> <!-- 生成远程服务接口配置 --> <dubbo:reference interface="com.cc.facade.IUserTestService" id="testFacade" /> </beans>
最后,我们先运行
test-service/src/test/java/ProviderTest.java 的main方法,注册服务到zookeeper上
接着运行
test-consumer/src/test/java/ConsumerTest.java 的main方法
可以看到控制台打印
源码下载:https://pan.baidu.com/s/1KdUDjJZdmftsdXW4iQoGZA
注意:
1导入源码的时候注意修改zookeeper地址
2 dubbox并没有发布到maven中央仓库的包,目前代码在github上,需要自己down下来编译,基于maven开发的。
项目GitHub地址:https://github.com/dangdangdotcom/dubbox
好了,快速入门到这里就结束了,更多细节请看 dubbo官方用户手册。
http://dubbo.io/books/dubbo-user-book/
posted on 2017-09-20 21:39 一只小蜗牛12138 阅读(326) 评论(0) 编辑 收藏 举报