您好,登录后才能下订单哦!
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相关配置
<!-- 为当前服务提供者取个名字,并且提供给注册中心 -->
<dubbo:application name="dubbo-helloworld-service"></dubbo:application>
<!-- 注册中心的配置,使用zk暴露服务 -->
<dubbo:registry protocol="zookeeper" address="127.0.0.1:2181"></dubbo:registry>
<!-- 定义暴露服务的端口号 -->
<dubbo:protocol name="dubbo" port="20880"></dubbo:protocol>
<!-- 暴露具体的服务接口 -->
<dubbo:service retries="3" interface="org.hzg.dubbo.api.service.DubboHelloworldApi"
ref="helloWorldImpl"></dubbo:service>
在web工程里面进行zookeeper配置
<!-- 为当前服务提供者取个名字,并且提供给注册中心 -->
<dubbo:application name="dubbo-helloworld-web"></dubbo:application>
<!-- 注册中心的配置,用于消费者的监听 -->
<dubbo:registry protocol="zookeeper" address="127.0.0.1:2181"></dubbo:registry>
<!-- 监听服务,通过注册中心去进行查找,查找到后进行服务调用 -->
<dubbo:reference id="dubboHelloworldApi" interface="org.hzg.dubbo.api.service.DubboHelloworldApi"
retries="3" check="false" init="true"></dubbo:reference>
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
*/
@Controller
public 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
*/
@Service
public 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
可以看到服务提供方的日志打印
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。