分布式技术之dubbo框架初识篇

子墨2020-07-152640

大家好呀,这里是知了小姐姐。


毕业季虽然过了,但是秋招已经在来的路上了,最近有小伙伴向知了小姐姐吐槽,说Java的面试越来越难了。确实,虽然有疫情影响,但是企业的招聘要求并未降低,Java面试中最常被问到的就是分布式技术,今天知了小姐姐就来给大家分享分布式技术之dubbo


1:分布式的定义


定义:Dubbo是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和Spring框架无缝集成。


Dubbo是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。



2:分布式的快速上手


Dubbo分为服务提供者 和 服务消费者


2.1服务提供者


Dubbo和spring只需简单整合就能快速上手


1:pom引入spring的基础依赖包和dubbo的包以及调度中心zookeeper的包


 <dependencies>  

        <!-- spring begin -->  

        <dependency>  

            <groupId>org.springframework</groupId>  

            <artifactId>spring-context</artifactId>  

            <version>4.1.6.RELEASE</version>  

        </dependency>  

        <!-- spring end -->  

  

        <!-- dubbo begin -->  

        <dependency>  

            <groupId>com.alibaba</groupId>  

            <artifactId>dubbo</artifactId>  

            <version>2.5.3</version>  

        </dependency>  

        <!-- dubbo end -->  

  

        <!-- 注册中心zookeeper begin -->  

        <dependency>  

            <groupId>org.apache.zookeeper</groupId>  

            <artifactId>zookeeper</artifactId>  

            <version>3.3.6</version>  

        </dependency>  

        <!-- 注册中心zookeeper end -->  

  

        <!-- log begin -->  

        <dependency>  

            <groupId>commons-logging</groupId>  

            <artifactId>commons-logging</artifactId>  

            <version>1.1.1</version>  

        </dependency>  

        <dependency>  

            <groupId>log4j</groupId>  

            <artifactId>log4j</artifactId>  

            <version>1.2.15</version>  

            <exclusions>  

                <exclusion>  

                    <groupId>com.sun.jdmk</groupId>  

                    <artifactId>jmxtools</artifactId>  

                </exclusion>  

                <exclusion>  

                    <groupId>com.sun.jmx</groupId>  

                    <artifactId>jmxri</artifactId>  

                </exclusion>  

                <exclusion>  

                    <artifactId>jms</artifactId>  

                    <groupId>javax.jms</groupId>  

                </exclusion>  

                <exclusion>  

                    <artifactId>mail</artifactId>  

                    <groupId>javax.mail</groupId>  

                </exclusion>  

            </exclusions>  

        </dependency>  

        <!-- log end -->  

          

        <!-- other begin -->  

        <dependency>  

            <groupId>org.jboss.netty</groupId>  

            <artifactId>netty</artifactId>  

            <version>3.2.0.Final</version>  

        </dependency>  

        <dependency>  

            <groupId>com.101tec</groupId>  

            <artifactId>zkclient</artifactId>  

            <version>0.8</version>  

        </dependency>  

        <!-- other end -->  

</dependencies>


2:写配置文件


<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"  

    xmlns:context="http://www.springframework.org/schema/context"

    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

    http://www.springframework.org/schema/context

    http://www.springframework.org/schema/context/spring-context.xsd">  


 

     <context:component-scan base-package="com.zlt.dubbo"></context:component-scan>

 

    <!-- 提供方应用信息,用于计算依赖关系 -->

    <dubbo:application name="dubbo_provider"  />

 

    <!-- 使用zookeeper广播注册中心暴露服务地址 -->

    <dubbo:registry address="zookeeper://127.0.0.1:2181" />

 

    <!-- 用dubbo协议在20880端口暴露服务 -->

    <dubbo:protocol name="dubbo" port="20880" />

 

    <!-- 声明需要暴露的服务接口 -->

    <dubbo:service interface="com.zlt.dubbo.DubboService" ref="dubboService" />

</beans>


3:按照以前spring的写法


  定义接口,接口定义好了之后再定义我们的实现类。

4:读取配置文件把项目启动起来


ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");

    ((AbstractApplicationContext)ac).start();

    System.out.println("提供者启动");

   //就是服务不停

    System.in.read();


2.2 消费端 consumer


1:引入配置文件:还是包含spring dubbo zookeeper但是多了一个 提供者的坐标引入


  <dependencies>  

        <!-- spring begin -->  

        <dependency>  

            <groupId>org.springframework</groupId>  

            <artifactId>spring-context</artifactId>  

            <version>4.1.6.RELEASE</version>  

        </dependency>  

        <!-- spring end -->  

  

        <!-- dubbo begin -->  

        <dependency>  

            <groupId>com.alibaba</groupId>  

            <artifactId>dubbo</artifactId>  

            <version>2.5.3</version>  

        </dependency>  

        <!-- dubbo end -->  

  

      

        <dependency>  

            <groupId>org.apache.zookeeper</groupId>  

            <artifactId>zookeeper</artifactId>  

            <version>3.3.6</version>  

        </dependency>  

       

  

        <!-- log begin -->  

        <dependency>  

            <groupId>log4j</groupId>  

            <artifactId>log4j</artifactId>  

            <version>1.2.15</version>  

            <exclusions>  

                <exclusion>  

                    <groupId>com.sun.jdmk</groupId>  

                    <artifactId>jmxtools</artifactId>  

                </exclusion>  

                <exclusion>  

                    <groupId>com.sun.jmx</groupId>  

                    <artifactId>jmxri</artifactId>  

                </exclusion>  

                <exclusion>  

                    <artifactId>jms</artifactId>  

                    <groupId>javax.jms</groupId>  

                </exclusion>  

                <exclusion>  

                    <artifactId>mail</artifactId>  

                    <groupId>javax.mail</groupId>  

                </exclusion>  

            </exclusions>  

        </dependency>  

        <!-- log end -->  

  

        <!-- other begin -->  

        <dependency>  

            <groupId>com.101tec</groupId>  

            <artifactId>zkclient</artifactId>  

            <version>0.8</version>  

        </dependency>  

  

        <!-- 引入服务端的坐标 -->

           <dependency>

              <groupId>com.zlt</groupId>

   <artifactId>dubbo-provider</artifactId>

   <version>0.0.1-SNAPSHOT</version>

           </dependency>

  

  </dependencies>


2:写入配置文件


<?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"  

    xmlns:context="http://www.springframework.org/schema/context"

    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

    http://www.springframework.org/schema/context

    http://www.springframework.org/schema/context/spring-context.xsd">  

 

    <!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 -->

    <dubbo:application name="dubbo_consumer"  />

 

    <!-- 使用zookeeper广播注册中心暴露发现服务地址 -->

    <dubbo:registry address="zookeeper://127.0.0.1:2181" />

 

    <!-- 生成远程服务代理,可以和本地bean一样使用demoService -->

    <dubbo:reference id="dubboService" interface="com.zlt.dubbo.DubboService" />

</beans>



3:写调用的测试类


ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");

     //在服务端里面拿到 dubboservice

  DubboService ds = (DubboService) ac.getBean("dubboService");

  System.out.println(ds.sayHello("覃先生"));

 



3:调度中心的配置


把sample去掉就可以了




4:ssm中把dubbo揉进去


第一步就在在parent里面加入 dubbo还有 zookeeper 等等jar包。

第二步就是在service类里面 引入duboo相关的jar。同时里面所有的pojo要继承序列化

第三步就是改造我们service的applicationContext配置文件,同时改造pom文件把jar改成war。同时引入tomcat插件。在增加一个web.xml 把spring的监听放入 同时删除web项目里面的监听

第四步就是在web项目里面引入dubbo等相关的jar,修改springmvc的配置文件引入duboo相关的配置。

第五步就是先把zookeeper启动了 然后启动service的项目 在启动web的项目。


5:dubbo 的监控 root root


你学会了吗?


分享到这儿,相信小伙伴们已经对dubbo有了一定的认识。

如果还有不清楚的、想要深入了解dubbo的小伙伴们,关注公众号【汇智知了堂】,获取更多干货哦!

  • 培训费用

  • 上课方式

  • 开班时间

  • 就业情况