dubbo入门
dubbo 作为一项分布式服务调度框架,可以将系统的服务组件化,将服务单独抽取出来。提高系统的性能,当然,这个也仅限于分布式的服务当中。dubbo的架构图如下:
dubbo的特性:
1 提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及"请求-响应"模式的信息交换方式。
2 提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持。
3 基于注册中心目录服务,使服务消费方能动态的查×××提供方,使地址透明,使服务提供方可以平滑增加或减少机器。
dubbo 可以做什么:
1 透明化的远程方法调用(就像调用本地方法一样调用远程方法,只需简单配置,没有任何API侵入。)
2 软负载均衡及容错机制(可在内网替代F5等硬件负载均衡器,降低成本,减少单点。)
3 服务自动注册与发现(不再需要写死服务提供方地址,注册中心基于接口名查询服务提供者的IP地址,并且能够平滑添加或删除服务提供者。)
dubbo 应用场景
1.RPC分布式服务
当网站变大后,不可避免的需要拆分应用进行服务化,以提高开发效率,调优性能,节省关键竞争资源等。
比如:为了适用不断变化的市场需求,以及多个垂直应用之间数据交互方便,我们把公共的业务抽取出来作为独立的模块,为其他的应用提供服务,系统逐渐依赖于抽象和rpc远程服务调用。
2.配置管理
当服务越来越多时,服务的URL地址信息就会爆炸式增长,配置管理变得非常困难,F5硬件负载均衡器的单点压力也越来越大。
3.服务依赖
当进一步发展,服务间依赖关系变得错踪复杂,甚至分不清哪个应用要在哪个应用之前启动,架构师都不能完整的描述应用的架构关系。
4.服务扩容
接着,服务的调用量越来越大,服务的容量问题就暴露出来,这个服务需要多少机器支撑?什么时候该加机器?等等……
dubbo官方推荐利用zookeeper来当做服务注册中心,至于zookeeper的特性及应用场景在另外一篇文章中也有提到,这次利用zookeeper的windows版本进行dubbo的入门学习。zookeeper的windows版本安装比较简单,主要可以分为三步。
1、下载zookeeper安装包进行解压。
2、到解压目录的conf下面复制zoo_sample.cfg为zoo.cfg。修改zoo.cfg包括端口、数据路径(dataDir)、数据日志路径(dataLogDir)
3、运行bin下面的zkServer.cmd即可。
dubbo-helloworld 工程
缩写的dubbo-helloworld工程结构如下图:
在api工程里面定义接口
package org.hzg.dubbo.api.service;/** * Created by hzg on 2019/3/13 */public interface DubboHelloworldApi { //接口 public void helloWorldInterface();}
在service工程里面实现接口
package org.hzg.dubbo.service.service.impl;import org.hzg.dubbo.api.service.DubboHelloworldApi;import org.springframework.stereotype.Service;/** * Created by hzg on 2019/3/15 */@Service("helloWorldImpl")public class DubboHelloWorldApiImpl implements DubboHelloworldApi { @Override public void helloWorldInterface() { System.out.println("调用成功。。。。。。。。。。。。。。。。。。。。。。。。。。。。"); }}
在service工程里面进行zookeeper相关配置
在web工程里面进行zookeeper配置
web工程里面的controller
package org.hzg.dubbo.web.controller;import org.hzg.dubbo.web.service.HelloWorldService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.ResponseBody;/** * Created by hzg on 2019/3/15 */@Controllerpublic class HelloWorldController { @Autowired private HelloWorldService helloWorldService; @RequestMapping("/index") public String index() { return "index"; } @RequestMapping("/hello") @ResponseBody public String sayHello() { return "hello"; } @RequestMapping("/helloDubbo") @ResponseBody public String sayHelloDubbo() { helloWorldService.dubboHelloWorld(); return "this is the first step"; }}
web工程里面的service
package org.hzg.dubbo.web.service;import org.hzg.dubbo.api.service.DubboHelloworldApi;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;/** * Created by hzg on 2019/3/15 */@Servicepublic class HelloWorldService { @Autowired private DubboHelloworldApi dubboHelloworldApi; //这里就是api里面定义的接口 public void dubboHelloWorld() { dubboHelloworldApi.helloWorldInterface(); }}
以上都是一些主要的配置,至于pom文件,tomcat,spring等配置,这里不再赘述,接下来,看效果:
1、启动zookeeper
2、启动service服务(可以看到启动成功和一些注册成功的服务信息)
3、启动消费者,即web工程
访问:127.0.0.1:8080/helloDubbo
可以看到服务提供方的日志打印