以前微服务这块只用过SpringCloud搭建,可是最近面试会被问到dubbo框架,虽然以前也学了可是都忘了,故写此博客加深印象。html
Dubbo是一个分布式服务框架,以及阿里巴巴内部的SOA服务化治理方案的核心框架。其功能主要包括:高性能NIO通信及多协议集成,服务动态寻址与路由,软负载均衡与容错,依赖分析与降级等。java
节点说明:
1.Provider
暴露服务的生产者,向注册中心注册其提供的服务,并汇报调用时间到监控中心,此时间不包含网络开销。git
2.Container
服务运行容器github
3.Consumer
调用远程服务的服务消费者,服务消费者向注册中心获取服务提供者地址列表 , 并根据负载算法直接调用提供者,同时汇报调用时间到监控中心,此时间包含网络开销。面试
4.Monitor
统计服务的调用次调和调用时间的监控中心,统计先在内存汇总后每分钟一次发送到监控中心服务器,并以报表展现。算法
5.Registry
注册中心负责服务地址的注册与查找,至关于目录服务,服务提供者和消费者只在启动时与注册中心交互,注册中心不转发请求,压力较小 。spring
dubbo不一样服务间的区别与联系:
(1) 注册中心,服务提供者,服务消费者三者之间均为长链接,监控中心除外
(2) 注册中心经过长链接感知服务提供者的存在,服务提供者宕机,注册中心将当即推送事件通知消费者
(3) 注册中心和监控中心所有宕机,不影响已运行的提供者和消费者,消费者在本地缓存了提供者列表
(4) 注册中心和监控中心都是可选的,服务消费者能够直连服务提供者数据库
https://www.jianshu.com/p/302001c1c21fapache
里面就只包括实体类User和接口UserService
缓存
User.java
UserService.java
public interface UserService {
/** * 查询全部用户 * @return */
public List<User> queryAll();
}
项目结构如图:
<dependency>
<groupId>cn.sp</groupId>
<artifactId>m-common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>0.2.0</version>
</dependency>
dubbo.application.name=dubbo-producer
# 注册中心地址
dubbo.registry.address=zookeeper://ip:2181
# 指定通讯协议
dubbo.protocol.name=dubbo
# 通讯端口 这里指的是与消费者间的通讯协议与端口
dubbo.protocol.port=12345
注意: 这里的 @Service注解包名是 com.alibaba.dubbo.config.annotation.Service,而不是Spring的那个。
最后启动便可。
User{id=1, username='username_1', password='xxxx'}
User{id=2, username='username_2', password='xxxx'}
User{id=3, username='username_3', password='xxxx'}
User{id=4, username='username_4', password='xxxx'}
User{id=5, username='username_5', password='xxxx'}
User{id=6, username='username_6', password='xxxx'}
User{id=7, username='username_7', password='xxxx'}
User{id=8, username='username_8', password='xxxx'}
User{id=9, username='username_9', password='xxxx'}
。。。。
参考资料:https://github.com/apache/incubator-dubbo-spring-boot-project
代码地址:https://github.com/2YSP/dubbo-springboot-demo