项目结构

dubbo-demo

  dubbo-api:提供api接口,一般存储实体类和接口服务

  dubbo-provider:dubbo生产者提供服务,一般存储接口具体实现

  dubbo-customer:dubbo消费者使用服务,分发请求

一、新建项目dubbo-demo

1、新建Maven项目,File-->new-->Project,选择Maven

2、填充GroupId、ArtifactId和Version

3、一路Next,最后选择项目名称(之前创建过dubbo的项目,这里重命名为dubbo_demo)

4、生成项目,修改pom.xml(不修改也不影响子模块),删除src

二、添加基于SpringBoot的三个子模块dubbo-api、dubbo-provider、dubbo-customer

1、添加子模块dubbo-api,项目右键-->new-->Module

最后生成的dubbo-api 如下:

2、以相同的方式创建dubbo-provider和dubbo-customer如下:

三、各个模块添加代码示例

1、dubbo-api

phone(手机实体类):

package com.mirana.api.model;import java.io.Serializable;
import java.math.BigDecimal;/*** Title:手机 实体类** @CreatedBy Mirana* @DateTime 2018/5/25 8:43*/
public class Phone implements Serializable {// 主键idprivate Long       id;// 手机名称private String     name;// 价格private BigDecimal price;public Long getId () {return id;}public void setId (Long id) {this.id = id;}public String getName () {return name;}public void setName (String name) {this.name = name;}public BigDecimal getPrice () {return price;}public void setPrice (BigDecimal price) {this.price = price;}}

IPhoneService手机接口

package com.mirana.api.service;import com.mirana.api.model.Phone;/*** Title:手机服务接口** @CreatedBy Mirana* @DateTime 2018/5/25 8:45*/
public interface IPhoneService {/*** 根据id查找手机** @param id* @return*/Phone findById (Long id);
}

在application.properties中定义端口

server.port=9011

2、dubbo-provider

pom.xml添加dubbo-api(具体实现类要实现dubbo-api的IPhoneService接口)和Apache Dubbo的Maven依赖,红色部分为新增依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.mirana.provider</groupId><artifactId>dubbo-provider</artifactId><version>v1.1</version><packaging>jar</packaging><name>dubbo-provider</name><description>Demo project for Spring Boot</description><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.2.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!-- 新增dubbo-api依赖 --><dependency><groupId>com.mirana.api</groupId><artifactId>dubbo-api</artifactId><version>v1.1</version></dependency><!-- 新增dubbo依赖 --><dependency><groupId>com.alibaba</groupId><artifactId>dubbo</artifactId><version>2.5.3</version><exclusions><exclusion><artifactId>spring</artifactId><groupId>org.springframework</groupId></exclusion></exclusions></dependency><dependency><groupId>org.apache.zookeeper</groupId><artifactId>zookeeper</artifactId><version>3.4.10</version><exclusions><exclusion><artifactId>slf4j-log4j12</artifactId><groupId>org.slf4j</groupId></exclusion></exclusions></dependency><dependency><groupId>com.github.sgroschupf</groupId><artifactId>zkclient</artifactId><version>0.1</version></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

添加实现类PhoneServiceImpl,@service注解是dubbo的注解,而非Spring的注解

package com.mirana.provider.service;import com.alibaba.dubbo.config.annotation.Service;
import com.mirana.api.model.Phone;
import com.mirana.api.service.IPhoneService;import java.math.BigDecimal;/*** Title:手机服务service** @CreatedBy Mirana* @DateTime 2018/5/25 10:32*/
@Service(version = "1.0.0")
public class PhoneServiceImpl implements IPhoneService {/*** 根据id查找手机** @param id* @return*/@Overridepublic Phone findById (Long id) {Phone phone = new Phone();phone.setId(id);phone.setName("iphonex");phone.setPrice(BigDecimal.valueOf(8848.88));return phone;}
}

新增dubbo服务提供者的配置文件:dubbo-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/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://code.alibabatech.com/schema/dubbohttp://code.alibabatech.com/schema/dubbo/dubbo.xsd"><!--定义了提供方应用信息,用于计算依赖关系;在 dubbo-admin 或 dubbo-monitor 会显示这个名字,方便辨识--><dubbo:application name="demo-provider" owner="demo_mirana" organization="dubbo_mirana"/><!--使用 zookeeper 注册中心暴露服务,注意要先开启 zookeeper--><dubbo:registry address="zookeeper://127.0.0.1:2181"/><!--dubbo协议在20880端口暴露服务 --><dubbo:protocol name="dubbo" port="20880"/><!--使用 dubbo 协议实现定义好的 Service Api 接口--><dubbo:service interface="com.mirana.api.service.IPhoneService" ref="phoneService" protocol="dubbo"/><!--具体实现该接口的 bean--><bean id="phoneService" class="com.mirana.provider.service.PhoneServiceImpl"/>
</beans>

在SpringBoot的启动类DubboProviderApplication上导入dubbo-provider.xml的配置

package com.mirana.provider;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ImportResource;@SpringBootApplication
@ImportResource(value = {"classpath:dubbo-provider.xml"})
public class DubboProviderApplication {public static void main (String[] args) {SpringApplication.run(DubboProviderApplication.class, args);}
}

在application.properties中定义端口

server.port=9012

3、dubbo-customer

1、pom.xml,与provider相似,添加dubbo-api和dubbo的依赖(红色部分)

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.mirana.customer</groupId><artifactId>dubbo-customer</artifactId><version>v1.1</version><packaging>jar</packaging><name>dubbo-customer</name><description>Demo project for Spring Boot</description><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.2.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!-- 新增dubbo-api --><dependency><groupId>com.mirana.api</groupId><artifactId>dubbo-api</artifactId><version>v1.1</version></dependency><!-- 新增dubbo --><dependency><groupId>com.alibaba</groupId><artifactId>dubbo</artifactId><version>2.5.3</version><exclusions><exclusion><artifactId>spring</artifactId><groupId>org.springframework</groupId></exclusion></exclusions></dependency><dependency><groupId>org.apache.zookeeper</groupId><artifactId>zookeeper</artifactId><version>3.4.10</version><exclusions><exclusion><artifactId>slf4j-log4j12</artifactId><groupId>org.slf4j</groupId></exclusion></exclusions></dependency><dependency><groupId>com.github.sgroschupf</groupId><artifactId>zkclient</artifactId><version>0.1</version></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
</project>

2、添加视图控制器PhoneController

package com.mirana.customer.controller;import com.mirana.api.model.Phone;
import com.mirana.api.service.IPhoneService;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import javax.annotation.Resource;/*** Title:TODO** @CreatedBy Mirana* @DateTime 2018/5/25 10:59*/
@RestController
@RequestMapping("/phone")
public class PhoneController {@Resourceprivate IPhoneService phoneService;/*** @return*/@RequestMapping("/findById")public Phone findById (Long id) {return phoneService.findById(id);}}

3、添加dubbo服务消费者的配置文件dubbo-customer.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.xsdhttp://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"><dubbo:application name="demo-consumer" owner="mirana" organization="dubbo_mirana"/><!--向 zookeeper 订阅 provider 的地址,由 zookeeper 定时推送--><dubbo:registry address="zookeeper://127.0.0.1:2181" protocol="zookeeper"/><!--使用 dubbo 协议调用定义好的 api 接口--><dubbo:reference id="phoneService" interface="com.mirana.api.service.IPhoneService"/></beans>

4、在SpringBoot的启动类DubboCustomerApplication上导入dubbo-customer.xml的配置

package com.mirana.customer;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ImportResource;@SpringBootApplication
@ImportResource(value = {"classpath:dubbo-customer.xml"})
public class DubboCustomerApplication {public static void main (String[] args) {SpringApplication.run(DubboCustomerApplication.class, args);}
}

在application.properties中定义端口

server.port=9013

三、请求服务消费者的地址

  查找id为3的手机:http://localhost:9013/phone/findById?id=3,返回的json数据如图

三、运行程序,查看dubbo-admin

1、先运行dubbo-api

  运行DubboApiApplication的main( )方法

2、再运行dubbo-provider

  运行DubboProviderApplication的main( )方法

3、最后运行dubbo-customer

  运行DubboCustomerApplication的main( )方法

4、查看dubbo-admin的服务

  http://localhost:8080/dubbo/,输入用户名root密码root

4.1提供的服务

4.2 服务提供者

4.3 服务消费者

分类: Java

Dubbo的Api+Provider+Customer示例(IDEA+Maven+Springboot+dubbo) 项目结构相关推荐

  1. Dubbo的Api+Provider+Customer示例(IDEA+Maven+Springboot+dubbo)

    项目结构 dubbo-demo dubbo-api:提供api接口,一般存储实体类和接口服务 dubbo-provider:dubbo生产者提供服务,一般存储接口具体实现 dubbo-customer ...

  2. 面试必会系列 - 11.1 一文读懂Maven:Maven工程类型、项目结构、工程关系、常见命令等

    本文已收录至 Github(MD-Notes),若博客中图片模糊或打不开,可以来我的 Github 仓库,包含了完整图文:https://github.com/HanquanHq/MD-Notes,涵 ...

  3. Maven+Spring Web 项目结构在Eclipse下面的实现

    软件151  马清友 我们在这里所要实现的关键就是如何保证 Maven 规定的目录结构. 这里对于Maven的目录结构做一个简单的说明:  src/main /Java src/main/resour ...

  4. java ee maven_针对新手的Java EE7和Maven项目–第1部分–简单的Maven项目结构–父pom...

    java ee maven 为什么呢 很多时候,我在日常工作中试图解决一些基本或复杂的Maven / Java EE项目结构问题. 为了提供解决方案,我经常最终会尝试项目结构,测试我在不同应用程序服务 ...

  5. 针对新手的Java EE7和Maven项目–第1部分–简单的Maven项目结构–父pom

    为什么呢 很多时候,我在日常工作中试图解决一些基本或复杂的Maven / Java EE项目结构问题. 为了提供解决方案,我经常最终会尝试项目结构,测试我在不同应用程序服务器上的部署并细化我的配置. ...

  6. maven(3)------maven构建web项目详细步骤

    eclipse集成工具,轻松通过maven构建web项目步骤如下: 一, 右键,new -->project, 进入下一页面 二,选择"Maven Project", 点击下 ...

  7. IDEA中使用Maven构建SSM项目

    文章目录 第一步 创建Maven webapp项目 第二步 搭建项目目录结构 第三步 添加配置文件内容 第四步 测试 第一步 创建Maven webapp项目 1. 首先,新建工程; 2. 选择Mav ...

  8. maven 按业务拆分模块_关于maven单项目拆分为Maven多模块项目

    最近工作遇到Maven单项目拆分多模块项目问题,故简作记录 相关分支如下: Master(线上分支) Split(拆分分支) UnionDev(团队成员同步开发合并分支) Dev1(团队成员同步开发分 ...

  9. Maven多模块,Dubbo分布式服务框架,SpringMVC,前后端分离项目,基础搭建,搭建过程出现的问题...

    现互联网公司后端架构常用到Spring+SpringMVC+MyBatis,通过Maven来构建.通过学习,我已经掌握了基本的搭建过程,写下基础文章为而后的深入学习奠定基础. 首先说一下这篇文章的主要 ...

最新文章

  1. 自动登录(过滤器filter的应用)
  2. phpRedisAdmin 安装
  3. win10 iis网站服务器,windows10如何搭建IIS服务器
  4. linux 进程suricata,开源USM之IDS suricata
  5. python连接mysql代码_Python连接MySQL的实例代码
  6. arduino 上传项目出错_活动回顾 | 续报率80%的Arduino试听课,确定不来看看吗?
  7. WDS+ADK+MDT 部署轻触式系统安装(1)《准备》
  8. python绘图工具reportlab介绍
  9. Matlab Coder杂记
  10. 无界鼠标MOUSE WITHOUT BORDERS连接失败的一种情况
  11. String的intern方法详解
  12. 微信表情的字符编号完整版【图文并茂哦!】
  13. 【信号处理】什么是基线漂移/趋势项?如何消除?
  14. 扫盲贴-汽车上坡辅助HAC和自动驻车Auto Hold秒懂
  15. R语言曲线回归:多项式回归、多项式样条回归、非线性回归数据分析
  16. Python编程:socket实现文件传输(文件服务器简易版)
  17. 小风翻译助手v1.0.0官方版
  18. 极品飞车9重制版,剧情到,车子抛锚,选第一辆车,就闪退,终于解决了
  19. [Mac版]安装Zotero之后打开word没有相应的加载项解决方案
  20. js带参数跳转php,JS实现页面跳转参数不丢失的方法

热门文章

  1. Python-打印乘法口诀表
  2. 字句解 (易經大意 韓長庚)
  3. 手把手教你做蓝牙聊天应用(三)-获取要连接的设备
  4. 【C语言】预处理的深入理解(第一期)
  5. C语言/C++编程学习,新手初学者篇
  6. 云主机是什么?可以用来干嘛?
  7. 软件工程专业的论文答辩_2015软件工程硕士论文答辩流程
  8. 网易云音乐数仓建设之路
  9. win10+gtx1050+tensorflow+cuda8.0+cudnn5.1配置踩到的坑(回忆)
  10. 使用print时出错 SyntaxError: Missing parentheses in call to ‘print‘ Did you mean print(““)