搭建一个简单的dubbo+spring+springMvc+mybatis+mysql项目

有一种孤独是习惯了在某个人的庇护下生活,这个人离开后,你不得不面对现实,也渐渐学会了模仿他的样子去面对生活。

孤独.jpg

对于传统的这种项目而言,想要使用dubbo这种分布式的服务治理框架,其实也是很简单的。
首先关于dubbo是啥就不用多讲了,可以参考一下这里:dubbo介绍

名称 说明
dubbo-api 主要存放服务方法的接口
dubbo-provider 承担provider 生产者主要就是Model层
dubbo-consumer 承担消费者consumer主要就是Controller层

dubbo中核心的两个对象就是providerconsumer,他们分别代表了服务的生产者和消费者,也就是说我们把provider生成的东西注册到dubbo中去,消费者从dubbo中获取服务就是。
现在开始我们的代码:
我们新建一个空项目取名为dubbo-ssm,然后添加3个模块。
分别为:

名称 说明
dubbo-api 主要存放服务方法的接口
dubbo-provider 承担provider 生产者主要就是Model层
dubbo-consumer 承担消费者consumer主要就是Controller层

具体的构建方法详见使用IDEA搭建模块化项目(dubbo-ssm)

按照上面的搭建方式搭好的架子,我们现在只需要关心我们业务相关的代码和配置了。

  1. dubbo-api里面写我们的公共接口:
package com.alibaba.dubbo.service;

import java.util.List;

/**
 * Created by GuiRunning on 2018/3/5.
 */
public interface DemoService {
    public List<String> getPermisson(Long id);
}

  1. dubbo-provider依赖我们的公共模块dubbo-api,在dubbo-providerpom.xml中添加依赖,这样我们才可以去实现dubbo-api里面的接口。
        <dependency>
            <groupId>DubboDemo</groupId>
            <artifactId>dubbo-api</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
  1. dubbo-provider中实现dubbo-api里面的接口
package com.alibaba.dubbo.service.impl;

import com.alibaba.dubbo.service.DemoService;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by GuiRunning on 2018/3/5.
 */
public class DemoServiceImpl implements DemoService {
    @Override
    public List<String> getPermisson(Long id) {
        List<String> result = new ArrayList<>();
        result.add(String.format("Permission_%d",id-1));
        result.add(String.format("Permission_%d",id));
        result.add(String.format("Permission_%d",id+1));
        return result;
    }
}
  1. 注册和暴露服务:在dubbo-provider项目中的main/resources目录下面新建一个provider.xml文件,内容如下:
<?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>
  1. 启动时加载配置文件
package com.alibaba.dubbo.service.impl;

import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * Created by GuiRunning on 2018/3/5.
 */
public class Provider {
    public static void main(String[] args) throws Exception{
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("provider.xml");
        System.out.println(context.getDisplayName() + ": here");
        context.start();
        System.out.println("服务已经启动...");
        System.in.read();
    }
}
  1. dubbo-consumer要依赖dubbo-api,所以要在dubbo-consumerpom.xml中添加依赖。
       <dependency>
            <groupId>DubboDemo</groupId>
            <artifactId>dubbo-api</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
  1. 配置引用远程服务:在dubbo-consumer项目中的main/resources目录下面新建一个consumer.xml文件,内容如下:
<?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="demoService" interface="com.alibaba.dubbo.service.DemoService"/>
</beans>
  1. dubbo-consumer中使用dubbo-provider提供的服务
package com.alibaba.dubbo.consumer;

import com.alibaba.dubbo.service.DemoService;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * Created by GuiRunning on 2018/3/5.
 */
public class Consumer {
    public static void main(String[] args) {
        //测试常规服务
        ClassPathXmlApplicationContext context =
                new ClassPathXmlApplicationContext("consumer.xml");
        context.start();
        System.out.println("consumer start");
        DemoService demoService = context.getBean(DemoService.class);
        System.out.println("consumer");
        System.out.println(demoService.getPermisson(1L));
    }
}
  1. 运行测试
    先启动Zookeeper,然后启动dubbo-provider,最后启动dubbo-consumer,运行结果如下:
    dubbo-consumer后台有打印内容:
consumer
[Permission_0, Permission_1, Permission_2]

dubbo-provider后台有打印内容:

org.springframework.context.support.ClassPathXmlApplicationContext@48cf768c: here
服务已经启动...

表示搭建成功了!后期要加业务直接按这种方式加就是了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,258评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,335评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,225评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,126评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,140评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,098评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,018评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,857评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,298评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,518评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,678评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,400评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,993评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,638评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,801评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,661评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,558评论 2 352

推荐阅读更多精彩内容

  • 0 准备 安装注册中心:Zookeeper、Dubbox自带的dubbo-registry-simple;安装Du...
    七寸知架构阅读 13,988评论 0 88
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,651评论 18 139
  • 每个人都有自己不同的爱好,因为每个人都是与众不同的唯一,如何让孩子对他不喜欢的运动感兴趣,这需要老师对孩子的耐心和...
    e1a95257f1fb阅读 178评论 0 0
  • 在那座阴雨的小城里,我从未忘记你。成都,带不走的,只有你。成都,这座来了不想走的城市,成都,这座来了走不脱的城...
    仰望星空_4295阅读 477评论 0 4
  • 关掉头顶的灯,一切都暗了下来,闭上眼睛这暗夜带给人的寂静和着那丝丝的旋律让人的心灵柔软到无处安放,就这样静静的放空...
    初心00阅读 273评论 0 0