美文网首页技术杂谈
一起快乐的使用Dubbo吧

一起快乐的使用Dubbo吧

作者: 香芋牛奶面包 | 来源:发表于2017-05-09 21:18 被阅读29次

    Dubbo是Alibaba开源的分布式服务框架,作为一个开源的微服务框架,dubbo作为RPC框架,使各层的调用极大的解耦

    服务是围绕服务提供方和服务消费方的,服务提供方实现服务,而服务消费方调用服务。

    以往的RPC框架,都是直接暴露地址给服务调用者,这样一来就把敏感的IP地址暴露给了服务调用者,而dubbo则是采用了 注册中心来调度调用地址,并且服务提供者有多个的情况下进行负载均衡,通俗的讲就是消费者并不知道自己调用的服务具体在哪里,只需要知道跟注册中心要就ok了

    话不多说,先来看看怎么使用dubbo:
    因为之前项目上用的是dubbox,需要自己去github上拿下来安装到本地仓库,这里我就直接用maven 仓库的dubbo2.5.3了

    首先:看一下工程目录结构

    分为服务提供者和消费者工程,其中服务提供者工程又分 api 和impl工程,消费者因为需要调用服务端接口所以也需要用到 api工程。

    api 工程 先定义一个服务接口 :
    package com.wangjn;
    
    /**
     * Created by Administrator on 2017/5/9.
     */
    public interface DemoService {
        public String sayHello();
    }
    
    impl 工程 实现接口
    package com.wangjn;
    
    /**
     * Created by Administrator on 2017/5/9.
     */
    public class DemoServiceImpl implements DemoService{
    
        @Override
        public String sayHello() {
            return "Hello!";
        }
    }
    
    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-2.5.xsd
        http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
    
        <!-- 提供方应用信息,用于计算依赖关系 -->
        <dubbo:application name="service" />
    
        <!-- 使用注册中心暴露服务地址 -->
        <dubbo:registry address="zookeeper://127.0.0.1:2181" />
    
        <dubbo:consumer  check="false"/>
    
        <!-- 监控服务 -->
        <!--<dubbo:monitor protocol="${dubbo.monitor.protocol}" />-->
    
        <!-- 用dubbo协议暴露服务 -->
        <dubbo:protocol name="dubbo" port="8858"/>
    
    
        <!-- 扫描注解包路径,多个包用逗号分隔,不填pacakge表示扫描当前ApplicationContext中所有的类 -->
       <!-- <dubbo:annotation package="com.wangjn"/>-->
        <!-- 声明需要暴露的服务接口 -->
        <dubbo:service interface="com.wangjn.DemoService"
                       ref="demoService" />
        <bean id="demoService" class="com.wangjn.DemoServiceImpl" />
    
    </beans>
    
    启动类:
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    /**
     * Created by Administrator on 2017/5/9.
     */
    public class Start {
            private static Logger logger = LoggerFactory.getLogger(Start.class);
            private static Start instance;
    
            /**
             * 获取默认单例
             *
             * @return 单例
             */
        public static Start getInstance() {
            if (instance == null) {
                synchronized (Start.class) {
                    if (instance == null)
                        instance = new Start();
                }
            }
            return instance;
        }
    
        public  void startup() {
            ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
                    new String[] { "applicationContext.xml" });
            context.start();
        }
    
        public static void main(String[] args) {
            getInstance().startup();
            logger.info("service run success!!!");
            while (true) {
            }//执行完后程序自动与注册中心断开联系,加个死循环不让与中心断开
        }
    }
    
    消费者工程:

    测试类:

    package com.wangjn;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    /**
     * Created by Administrator on 2017/5/9.
     */
    public class DemoConsumer {
        private static Logger logger = LoggerFactory.getLogger(DemoService.class);
        public static void main(String[] args) {
            ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
                    new String[] { "applicationContext.xml" });
            context.start();
            DemoService demoService = (DemoService) context.getBean("demoService");
            String hello = demoService.sayHello();
            logger.info(hello);
    
        }
    }
    
    
    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-2.5.xsd
        http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
    
        <!-- 提供方应用信息,用于计算依赖关系 -->
        <dubbo:application name="service-consumer" />
    
        <!-- 使用注册中心暴露服务地址 -->
        <dubbo:registry address="zookeeper://127.0.0.1:2181" />
    
        <dubbo:consumer  check="false"/>
    
    
    
        <!-- 扫描注解包路径,多个包用逗号分隔,不填pacakge表示扫描当前ApplicationContext中所有的类 -->
    
        <dubbo:reference id="demoService"
                         interface="com.wangjn.DemoService" />
    
    
    </beans>
    
    启动服务类,将dubbo 服务注册到注册中心
    Paste_Image.png

    消费者测试类 打印出 hello!

    Paste_Image.png

    至此 只是dubbo的最基本使用

    相关文章

      网友评论

        本文标题:一起快乐的使用Dubbo吧

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