美文网首页大数据
百万年薪架构师,7张图带你从入门到实践Dubbo

百万年薪架构师,7张图带你从入门到实践Dubbo

作者: 5a713e32ab76 | 来源:发表于2020-03-20 15:19 被阅读0次

    一、dubbo基本原理

    dubbo架构图如下:

    节点角色说明

    调用关系说明:

    0.服务容器负责启动,加载,运行服务提供者。

    1.服务提供者在启动时,向注册中心注册自己提供的服务。

    2.服务消费者在启动时,向注册中心订阅自己所需的服务。

    3.注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。

    4.服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。

    5.服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

    具体详细内容请参加dubbo官方文档

    home

    二、入门demo简介

    该demo包含三个项目,分别是:

    服务提供端项目:provider

    服务消费端项目:consumer

    共用服务接口项目:api

    依赖关系如图:

    api项目是一个jar项目,将生成的jar打包到maven仓库,作为provider和consumer项目的依赖导入。

    三、dubbo-远程调用(RPC)具体实现

    1、启动zookeeper

    在启动服务提供者项目之前要先启动zookeeper,因为我们需要把服务提供方注册到zookeeper中,然后才能被服务消费方发现并调用。

    关于zookeeper这里不做详细介绍了,简单概括就是分布式服务治理框架,用于服务注册与发现,实现远程调用功能等。

    zookeeper下载

    Apache ZooKeeper

    解压并修改配置

    zookeeper下载完成后解压到合适目录,然后进入到zookeeper的conf目录,找到zoo_sample.cfg文件将其重命名为zoo.cfg,然后打开该文件, 将其中的dataDir和dataLogDir修改如下:

    dataDir=E:\\Soft\\zookeeper-3.4.6\\data

    dataLogDir=E:\\Soft\\zookeeper-3.4.6\\log

    修改为你本地硬盘的目录

    启动zookeeper

    进入到zookeeper的bin目录下,双击zkServer.cmd,启动zookeeper

    2.dubbo接口服务api项目

    新建maven项目api,注意将其pom.xml中的打包方式改为jar

    然后在com.dubbo.api.service包下新建DemoService接口,如下:

    public interface DemoService {    String sayHello(String name);}

    项目结构如图:

    然后将项目打包(install一下即可),在E:\temp\api\target\目录下找到该jar,然后打包到本地maven仓库,打开cmd命令窗口,输入以下令如下:

    mvn install:install-file -Dfile=E:\temp\api\target\api.jar -DgroupId=com.dubbo.api -DartifactId=api -Dversion=1.0.0 -Dpackaging=jar -DgeneratePom=true -DcreateChecksum=true

    注意:jar路径该为你自己的路径

    3.dubbo服务提供者provider项目

    新建maven项目provider,并在pom.xml中添加以下依赖:

    <dependency>  <groupId>com.dubbo.api</groupId>  <artifactId>api</artifactId>  <version>1.0.0</version></dependency><!-- com.alibaba " dubbo --><dependency>  <groupId>com.alibaba</groupId>  <artifactId>dubbo</artifactId>  <version>2.5.3</version></dependency> <dependency>  <groupId>com.101tec</groupId>  <artifactId>zkclient</artifactId>  <version>0.10</version></dependency><dependency>  <groupId>org.springframework</groupId>  <artifactId>spring-context</artifactId>  <version>4.0.5.RELEASE</version></dependency>

    这里引入了上面的生成的api接口依赖、dubbo依赖、zookeeper客服端依赖以及启动项目必需的依赖

    然后在com.dubbo.provider.service.impl包下新建DemoServiceImp并实现DemoService接口,如下:

    public class DemoServiceImpl implements DemoService{@Overridepublic String sayHello(String name) {    return "Hello " + name;}

    然后在resources下新建provider.xml文件,配置如下:

    <?xml version="1.0" encoding="UTF-8"?><beans xmlns="Index of /schema/beans"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"  xsi:schemaLocation="Index of /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="demo-provider" owner="wly" 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.dubbo.api.service.DemoService" ref="demoService" protocol="dubbo" /><!--具体实现该接口的 bean--><bean id="demoService" class="com.dubbo.provider.service.impl.DemoServiceImpl"/></beans>

    然后在java下直接新建Provider用于启动项目:

    public class Provider {public static void main(String[] args) throws IOException {    ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("provider.xml");    context.start();    System.out.println("dubbo服务提供端已启动....");    System.in.read(); // 按任意键退出}}

    provider项目结构如图:

    然后直接运行该main函数-dubbo服务提供者已启动!

    4.dubbo服务消费者consumer项目

    新建maven项目consumer,并在pom.xml中添加以下依赖:

    <dependency>  <groupId>com.dubbo.api</groupId>  <artifactId>api</artifactId>  <version>1.0.0</version></dependency><!-- com.alibaba " dubbo --><dependency>  <groupId>com.alibaba</groupId>  <artifactId>dubbo</artifactId>  <version>2.5.3</version></dependency><dependency>  <groupId>com.101tec</groupId>  <artifactId>zkclient</artifactId>  <version>0.10</version></dependency><dependency>  <groupId>org.springframework</groupId>  <artifactId>spring-context</artifactId>  <version>4.0.5.RELEASE</version></dependency>

    和provider项目添加的依赖一样。

    然后在resources下新建comsumer.xml,配置服务消费者,如下:

    <?xml version="1.0" encoding="UTF-8"?><beans xmlns="Index of /schema/beans"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"  xsi:schemaLocation="Index of /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="demo-consumer" owner="wly" organization="dubbox"/><!--向 zookeeper 订阅 provider 的地址,由 zookeeper 定时推送--><dubbo:registry address="zookeeper://localhost:2181"/><!--使用 dubbo 协议调用定义好的 api.PermissionService 接口--><dubbo:reference id="demoService" interface="com.dubbo.api.service.DemoService"/></beans>

    然后在java下新建Consumer.class用于启动该项目,如下:

    public class Consumer {public static void main(String[] args) throws IOException {    ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext( "consumer.xml" );    context.start();    System.out.println("dubbo服务消费端已启动...");    DemoService demoService = (DemoService)context.getBean( "demoService" );// 获取远程服务代理    String hello = demoService.sayHello( "world" );//执行远程方法    System.out.println(hello);//显示调用结果    System.in.read(); // 按任意键退出}}

    启动该项目,显示调用结果,如图:

    到这里就已经完成了dubbo的远程调用。下面介绍下dubbo-admin管理控制台

    四、dubbo-admin管理控制台

    通过dubbo-admin可以更好的管理dubbo服务。

    首先下载dubbo-admin的war包,下载地址:

    dubbo-admin-2.6.0.war 下载

    下载完成后,将dubbo-admin-2.6.0.war复制到tomcat的webapps目录下。然后启动tomcat,访问

    http://localhost:8080/dubbo-admin-2.6.0/

    也可以将dubbo-admin-2.6.0重命名为dubbo-admin访问的时候直接访问http://localhost:8080/dubbo-admin即可

    用户名和密码都是root

    登录后就可以通过网页进行管理dubbo服务了,如图:

    需要更多资料请私信转发点赞,大家一起努力学习

    相关文章

      网友评论

        本文标题:百万年薪架构师,7张图带你从入门到实践Dubbo

        本文链接:https://www.haomeiwen.com/subject/ngpjyhtx.html