分布式系统中,各个系统间远程调用的性能决定了这个分布式系统好坏
Dubbo是专门用来解决各个服务间调用的RPC框架,解决分布式系统中的远程调用问题
而Zookeeper(注册调度中心)的作用是:比如说50台用户服务器,与50台订单服务器,但是上线后发现用户服务器使用率较低,那么Zookeeper的作用就是统一管理调度
Dubbo采用的是Socket通信机制,可以提升通信效率,并且可以建立长连接.
Dubbo是一款高性能,轻量级的开源的RPC框架.它的三大核心能力:
1.面向接口的远程方法调用
2.智能容错和负载均衡
3.服务自动注册和发现
官网:http://dubbo.apache.org/zh-cn/
这里所谓的Container容器 生产者和消费者都是有容器的,这里指Spring容器
register注册 subscribe订阅 notify通知 invoke调用
Provider:生产者 暴露服务的提供方,向注册中心注册自己提供的服务
Consumer:消费者 调用远程服务,启动时向注册中心订阅所需要服务,从提供者地址列表,基于软件负载均衡算法,选一台提供者进行调用.如果调用失败,再选另外一台调用
Container:容器 Spring和Dubbo可以无缝对接 这个容器可以理解为Spring容器
Registry:注册中心 返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更的数据给消费者
Monitor:监控中心 Dubbo本身的功能 服务生产者和消费者在内存中累计调用次数和时间,定时每分钟发送一次统计数据到监控中心
Dubbo调用协议:就是消费者调用生产者需要的一种协议
Dubbo支持的协议有:dubbo,hessan,rmi,http,webservice,thrift,mmemmcached,redis.
Dubbo官方推荐使用dubbo协议.dubbo协议默认端口20880
注册中心可以没有
演示直连的方式
创建一个空项目
设置下maven encoding
创建moudle
建个maven工程
pom.xml
创建一个实体类 记得序列化 不然报错
定义个接口
写个实现类
创建一个Spring配置文件 将服务暴露出去
我们需要启动这个web项目 将项目改成web项目
模块下不让添加框架支持 用下面方式
配置Tomcat启动服务
启动
下面创建个消费者
为了避免一会又要改成web工程 直接创建web工程
依赖还是那几个 servlet依赖不用管
这里注意,在直连的情况下,消费者无法知道生产者提供了哪些接口,需要把生产者打成jar包,让消费者依赖
要把生产者打jar包 先把生产者的
<packaging>war</packaging>注释掉 等打包完成再恢复
消费者配置Spring配置文件
这个id不影响
两个tomcat端口号 和 jmx 修改下
示例代码
链接:https://pan.baidu.com/s/1ZV-OzE5aBkhnBFUMEhav0w
提取码:bn72
--来自百度网盘超级会员V4的分享
上面例子,把生产者整个jar包搬到消费者那,好像看不出Dubbo的效果,甚至说我直接new个实现类也可以完成
实际使用中
官方推荐必须有一个接口工程 它就是一个maven java工程
要求接口工程里存放的内容如下:
1.对外暴露的服务接口
2.实体bean对象
下面还是以直连的方式,分成三个包 分别是生产者 接口工程 消费者
下面对上面的直连方式进行改造
还是在原来项目的基础上新增maven工程
创建接口工程
接口工程里放的是接口和实例bean
上面这个项目打成jar包,放到生产者和消费者那边
配置方面和原先是一样的 只不过分包了
第二组测试 就是将接口工程独立出来 然后生产者和消费者都去依赖接口工程
链接:https://pan.baidu.com/s/111Jkx8qYkXvF-oObbIxA7g
提取码:if2x
--来自百度网盘超级会员V4的分享
上面两个例子是SpringMVC中 通过Dubbo两个应用直连的方式
但是直连的话,无法保证服务最优化,调度问题也无法解决(服务空闲浪费资源) 管理服务
这里就扯到注册中心 Zookeeper
注册中心有很多
Dubbo官方推荐使用Zookeeper注册中心
关于Zookeeper安装及配置Zookeeper安装及配置-CSDN博客
下面例子用Zookeeper作为Bubbo服务的注册中心
生产者的配置 新增了Zookeeper依赖
消费者 依赖一样加了Zookeeper依赖
因为已经使用注册中心 url可以不写
其他配置还是一样
配置Tomcat 注意生产者和消费者 端口号和JMX号
先运行Zookeeper
然后启动生产者 和消费者
代码地址
链接:https://pan.baidu.com/s/1JqmCXljWl5hdnsiH13wkeA
提取码:4qeg
--来自百度网盘超级会员V4的分享
关于服务接口版本号问题 原因在于 系统迭代 代码更新 版本号用于指定服务的版本
新建09 和 10 还是用06的接口包
其他一样
下面是生产者
配置Tomcat 注意端口号和JMX号 启动Zookeeper 生产者和消费者 测试
链接:https://pan.baidu.com/s/1n6HJAbO2FXTVao5cnqXp3A
提取码:my77
--来自百度网盘超级会员V4的分享
在消费者加上check 如果为true 则需要生产者先启动,因为会去Zookeeper检查该服务,如果生产者不提前启动 检查不到
生产者和服务者都可以配置指定服务超时时间