开始学习微服务了,记录一下Dubbo+zookeeper快速入门
1、了解Dubbo(引用)
1.透明化的远程方法调用,就像调用本地方法一样调用远程方法,只需简单配置,没有任何API侵入。
2.软负载均衡及容错机制,可在内网替代F5等硬件负载均衡器,降低成本,减少单点。
3. 服务自动注册与发现,不再需要写死服务提供方地址,注册中心基于接口名查询服务提供者的IP地址,并且能够平滑添加或删除服务提供者。(下面讲解)
Dubbo采用全Spring配置方式,透明化接入应用,对应用没有任何API侵入,只需用Spring加载Dubbo的配置即可,Dubbo基于Spring的Schema扩展进行加载。
Provider(生产者): 暴露服务的服务提供方。
Consumer(消费者): 调用远程服务的服务消费方。
Registry(注册中心): 服务注册与发现的注册中心。dubbo推荐的是zookeeper。什么是zookeeper?zookeeper是用于分布式中一致性处理的框架。更多的可以查看我之前的文章:这么说吧,zookeeper 很简单,其实就是个框架,是一致性处理用的。简单的讲,zookeeper就是个中介,卖楼的(生产者)把楼盘信息放在中介(注册中心)那里,想买楼的(消费者)去中介那里获得楼盘资源清单。于是,我们的图变成了这样:
是不是好很多了?还不够, 我们还需要个监控中心(干嘛用的?当然是监控用的,调用失败怎么办?挂了怎么办?): Monitor: 统计服务的调用次调和调用时间的监控中心。(不画图了)
然后,Provider放在容器里运行,就叫做Container服务运行容器。(不画图了)
最终dubbo架构,如图(从0开始看起):
服务是 Dubbo 中的核心概念,一个服务代表一组 RPC 方法的集合,服务是面向用户编程、服务发现机制等的基本单位。Dubbo 开发的基本流程是:用户定义 RPC 服务,通过约定的配置 方式将 RPC 声明为 Dubbo 服务,然后就可以基于服务 API 进行编程了。对服务提供者来说是提供 RPC 服务的具体实现,而对服务消费者来说则是使用特定数据发起服务调用。
2、准备工具
下载zookeeper,直接去官网下载就可以
在bin里点击zkServer.cmd直接开启注册中心
下载dubbo-admin 可视化工具
官方地址:https://github.com/apache/incubator-dubbo/tree/2.5.xhttps://github.com/apache/incubator-dubbo/tree/2.5.x
推荐用IDEA打开dubbo-admin项目,把项目打包成jar包,并使用java -jar运行jar包
项目的application.properties配置,已经默认配置好的 用户是root 密码root
server.port=7001 spring.velocity.cache=false spring.velocity.charset=UTF-8 spring.velocity.layout-url=/templates/default.vm spring.messages.fallback-to-system-locale=false spring.messages.basename=i18n/message spring.root.password=root spring.guest.password=guest dubbo.registry.address=zookeeper://127.0.0.1:2181
3、创建Springboot项目
新建2个springboot项目,对应生产者和消费者
这是2个项目的pom配置,导入Dubbo和Zookeeper需要的包,当然版本日新月异,需要自己去官网了解版本的改动
org.apache.dubbo
dubbo-spring-boot-starter
2.7.3
com.github.sgroschupf
zkclient
0.1
org.apache.curator
curator-client
2.12.0
org.apache.curator
curator-recipes
2.12.0
org.apache.zookeeper
zookeeper
3.5.9
org.slf4j
slf4j-log4j12
生产者:卖票的服务 provider-service
配置application.properties
# 应用名称 spring.application.name=provider-service # 应用服务 WEB 访问端口 server.port=8081 #服务应用名称 dubbo.application.name=provider-service #注册中心地址 dubbo.registry.address=zookeeper://127.0.0.1:2181 #哪些服务要被注册 会扫描这个包下的服务 dubbo.scan.base-packages=com.hcx.service
新建TicketService.java 的接口
public interface TicketService {
public String getTicket();
}
以及它的实现类 TicketServiceimpl.java
@Component
@Service(version = "1.0.0",timeout = 10000,interfaceClass = TicketService.class)
//dubbo3.x版本@Service已弃用 新版推荐@DubboService
public class TicketServicelmpl implements TicketService {
@Override
public String getTicket() {
return "北京-->>上海 一等座";
}
}
项目图:
消费者:买票的服务 consumer-service
配置application.properties
# 应用名称 spring.application.name=consumer-service # 应用服务 WEB 访问端口 server.port=8082 dubbo.application.name=consumer-service dubbo.registry.address=zookeeper://127.0.0.1:2181 dubbo.protocol.port=20880 #消费者不需要写服务
新建一个TicketService.java 对应生产者的TicketService
public interface TicketService {
public String getTicket();
}
在新建一个UserService.java的服务,和一个Controller页面显示拿到的数据,也可以去测试类写
@Service
public class UserService {
//去注册中心拿服务
@Reference(version = "1.0.0",check = true) //引用 pom坐标、路径相同的接口名 两边的接口相同就可以调用
TicketService tickerService;
public String buyTicker(){
String ticket = tickerService.getTicket();
return "在注册中心拿到:"+ticket;
}
}
4、完成
开启注册中心,运行dubbo-admin,然后在运行2个springboot项目
打开http://localhost:7001/ dubbo-admin主页地址
可以看到生产者成功注册到注册中心了
在consumer-service项目中测试
在测试类中测试
成功 拿到数据
哈哈 可以向分布式系统前进了



