技术杂谈

一起快乐的使用Dubbo吧

2017-05-09  本文已影响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的最基本使用

上一篇下一篇

猜你喜欢

热点阅读