Dubbo分布式服务框架入门使用
概念:
推荐更为详细解说杨老师:
https://www.cnblogs.com/yjmyzz/p/dubbox-demo.html
服务定义
服务是围绕服务提供方和服务消费方的,服务提供方实现服务,而服务消费方调用服务。
服务注册
对于服务提供方,它需要发布服务,而且由于应用系统的复杂性,服务的数量、类型也不断膨胀;对于服务消费方,它最关心如何获取到它所需要的服务,而面对复杂的应用系统,需要管理大量的服务调用。而且,对于服务提供方和服务消费方来说,他们还有可能兼具这两种角色,即既需要提供服务,有需要消费服务。
通过将服务统一管理起来,可以有效地优化内部应用对服务发布/使用的流程和管理。服务注册中心可以通过特定协议来完成服务对外的统一。Dubbo提供的注册中心有如下几种类型可供选择:
- Multicast注册中心
- Zookeeper注册中心
- Redis注册中心
- Simple注册中心
服务监控
无论是服务提供方,还是服务消费方,他们都需要对服务调用的实际状态进行有效的监控,从而改进服务质量。
以下皆是个人理解,如若有错误,还望指出,谢谢!
dubbo就是个服务框架,如果没有分布式的需求,其实是不需要用的,只有在分布式的时候,才有dubbo这样的分布式服务框架的需求,并且本质上是个服务调用的东东,说白了就是个远程服务调用的分布式框架(告别Web Service模式中的WSdl,以服务者与消费者的方式在dubbo上注册)
下面就来说说入门使用dubbo,本文使用的注册中心是Zookeeper注册中心,在Linux系统下,开发工具是Intellij Idea,使用springboot微服务框架
准备工作:下载注册中心Zookeeper,下载地址 http://www.apache.org/dyn/closer.cgi/zookeeper/
第一步:
启动注册中心Zookeeper
windows下 直接找到文件apach-zookeeper-3.4.5\bin,目录下的zkServer.cmd双击启动
linux下 同样找到文件目录 ,本人的是在 /usr/java/zookeeper/bin 使用 ./zkServer.sh start启动 ,启动需要一定时间,所以可以反复查看运行状态,输入 ./zkServer.sh status
第二步:
widows下
直接访问http://localhost:8080即可
linux下
启动tomcat,找到安装目录输入./startup.sh
关闭防火墙 service iptables stop
到这里已经可以查看登陆到Zookeeper注册中心:
1,首先可以先查看下tomcate猫的启动状态 ,输入 http://当前启动注册中心的机器ip地址:8080 ( tomcat默认8080端口)
2,输入 http://当前启动注册中心的机器ip地址:8080/dubbo-admin/ 进入到注册中心
3,注册中心会提示你输入密码 默认账号是root,密码是root,登陆成功后进入以下界面
4,登陆注册中心后,什么都没有,下面就开始写代码
4.1 服务提供者
4.1.1在pom.xml中加入依赖
<dubbo.version>2.5.3</dubbo.version> <zookeeper.version>3.4.7</zookeeper.version> <zkclient.version>0.1</zkclient.version> <!-- dubbo相关 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>${dubbo.version}</version> </dependency> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>${zookeeper.version}</version> </dependency> <dependency> <groupId>com.github.sgroschupf</groupId> <artifactId>zkclient</artifactId> <version>${zkclient.version}</version> </dependency>
4.1.2
逻辑代码还是像平时一样,该怎么写就怎么写,但要注意:
服务提供者必须把Interface接口写成一个包,并且暴露出来
在本项目中再去实现service的接口,并且注入的@service必须为 alibaba下提供的service,例如:
import com.alibaba.dubbo.config.annotation.Service;//引入的包是albaba提供的bean @Service public class StudentService implements StudentService{
//实现本项目下接口包的方法
}
4.1.3 向注册中心中给提供者的注册下
如果你使用是springboot微服务框架
在application.properties总配置文件中加入 注册
#注册到zookeeper 中服务的名字 spring.dubbo.application.name=lwh_provider #注册中心的地址,ip为启动了zookeeper的linux服务器的ip,2181是注册中心的默认端口 spring.dubbo.registry.address=zookeeper://192.168.25.129:2181 #使用dubbo协议 spring.dubbo.protocol.name=dubbo #dubbo服务在哪个端口暴露 spring.dubbo.protocol.port=20880 #去哪里扫描dubbo的服务组件,这是你service接口的实现类的包名,也就是上面提到的为什么把接口暴露出来 spring.dubbo.scan=com.lwh.service.impl
如果你使用是spring,那就再spring配置中加入 注册
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"> <!--定义了提供方应用信息,用于计算依赖关系;在 dubbo-admin 或 dubbo-monitor 会显示这个名字,方便辨识--> <dubbo:application name="demotest-provider" owner="programmer" organization="dubbox"/> <!--使用 zookeeper 注册中心暴露服务,注意要先开启 zookeeper--> <dubbo:registry address="zookeeper://localhost:2181"/> <!-- 用dubbo协议在20880端口暴露服务 --> <dubbo:protocol name="dubbo" port="20880" /> <!--使用 dubbo 协议实现定义好的 api.PermissionService 接口--> <dubbo:service interface="com.alibaba.dubbo.demo.DemoService" ref="demoService" protocol="dubbo" /> <!--具体实现该接口的 bean--> <bean id="demoService" class="com.alibaba.dubbo.demo.impl.DemoServiceImpl"/> </beans>
5 服务消费者
5.1 跟提供者一样,加入依赖
5.2 代码依旧跟以前一样写
5.3 向注册中心中给消费者的注册下
如果你使用是springboot微服务框架
在application.properties总配置文件中加入 注册
#消费者 在注册中心注册的名字 spring.dubbo.application.name=lwh_Consumer #注册中心的地址 spring.dubbo.registry.address=zookeeper://192.168.25.129:2181 #去哪里扫描消费者 spring.dubbo.scan=com.lwh.action
如果你使用是spring,那就再spring配置中加入 注册
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"> <dubbo:application name="demotest-consumer" owner="programmer" organization="dubbox"/> <!--向 zookeeper 订阅 provider 的地址,由 zookeeper 定时推送--> <dubbo:registry address="zookeeper://localhost:2181"/> <!--使用 dubbo 协议调用定义好的 api.PermissionService 接口--> <dubbo:reference id="permissionService" interface="com.alibaba.dubbo.demo.DemoService"/> </beans>
然后让两个项目跑起来后,再去登陆注册中心会发现自己发布的已经注册到注册中心去了
提供者
消费者
到此为止,dubbo的入门就结束了,实际中有多提供者多消费者情况,比这要复杂的多,当然只有这样才能体现dubbo的特性。
以上是个人所理解,技术有限,如若有错误,希望能够提出交流,谢谢!