Springboot+dubbo案例

ldtkCoder 于 2017-10-18 11:24:13 发布
阅读量2.1k 收藏 3
点赞数 1
CC 4.0 BY-SA版权
分类专栏: springboot 文章标签: springboot maven zookeeper
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.youkuaiyun.com/ldtkldtk/article/details/78270931
springboot 专栏收录该内容
1 篇文章
订阅专栏
本文详细介绍了一个使用SpringBoot和Dubbo搭建的SOA服务框架案例。案例包含服务提供者和消费者两端,通过ZooKeeper作为注册中心实现服务发现与调用。文中展示了项目的结构、依赖配置及核心代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


本案例中有俩部分Server和client的两个项目

1.springboot-dubbo-server服务提供者项目

1.项目的结构图

Server项目结构图.png

2.pom.xml的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>springboot</groupId>
    <artifactId>springboot-dubbo-server</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>springboot-dubbo 服务端:: 整合 Dubbo/ZooKeeper 详解 SOA 案例</name>
​
    <!-- Spring Boot 启动父依赖 -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.1.RELEASE</version>
    </parent>
​
    <properties>
        <dubbo-spring-boot>1.0.0</dubbo-spring-boot>
    </properties>
​
    <dependencies>
​
        <!-- Spring Boot Dubbo 依赖 -->
        <dependency>
            <groupId>io.dubbo.springboot</groupId>
            <artifactId>spring-boot-starter-dubbo</artifactId>
            <version>${dubbo-spring-boot}</version>
        </dependency>
​
        <!-- Spring Boot Web 依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
​
        <!-- Spring Boot Test 依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
​
        <!-- Junit -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
    </dependencies>
</project>
3.application.properties

## Dubbo 服务提供者配置
spring.dubbo.application.name=provider
## Dubbo 服务对象的注册中心zookeeper的地址和端口
spring.dubbo.registry.address=zookeeper://192.168.182.3:2181
## 用Dubbo协议在20880端口暴露服务
spring.dubbo.protocol.name=dubbo
spring.dubbo.protocol.port=20880
## 包扫描范围
spring.dubbo.scan=org.spring.springboot.dubbo
4.ServerApplication.java,项目启动入口程序

package org.spring.springboot;
​
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
​
/**
 * Spring Boot 应用启动类
 *
 * Created by bysocket on 16/4/26.
 */
// Spring Boot 应用的标识
@SpringBootApplication
public class ServerApplication {
​
    public static void main(String[] args) {
        // 程序启动入口
        // 启动嵌入式的 Tomcat 并初始化 Spring 环境及其各 Spring 组件
        SpringApplication.run(ServerApplication.class,args);
    }
}
5.实体对象City

package org.spring.springboot.domain;
​
import java.io.Serializable;
​
/**
 * 城市实体类
 *
 * Created by bysocket on 07/02/2017.
 */
public class City implements Serializable {
​
    private static final long serialVersionUID = -1L;
​
    /**
     * 城市编号
     */
    private Long id;
​
    /**
     * 省份编号
     */
    private Long provinceId;
​
    /**
     * 城市名称
     */
    private String cityName;
​
    /**
     * 描述
     */
    private String description;
​
    public City() {
    }
​
    public City(Long id, Long provinceId, String cityName, String description) {
        this.id = id;
        this.provinceId = provinceId;
        this.cityName = cityName;
        this.description = description;
    }
​
    public Long getId() {
        return id;
    }
​
    public void setId(Long id) {
        this.id = id;
    }
​
    public Long getProvinceId() {
        return provinceId;
    }
​
    public void setProvinceId(Long provinceId) {
        this.provinceId = provinceId;
    }
​
    public String getCityName() {
        return cityName;
    }
​
    public void setCityName(String cityName) {
        this.cityName = cityName;
    }
​
    public String getDescription() {
        return description;
    }
​
    public void setDescription(String description) {
        this.description = description;
    }
}
6.dubboService的接口,客户端也需要一份此接口以便接收服务对象

package org.spring.springboot.dubbo;
​
import org.spring.springboot.domain.City;
​
/**
 * 城市业务 Dubbo 服务层
 *
 * Created by bysocket on 28/02/2017.
 */
public interface CityDubboService {
​
    /**
     * 根据城市名称,查询城市信息
     * @param cityName
     */
    City findCityByName(String cityName);
}
7.发布出来的service对象,此对象通过Dubbo注册到zookeeper服务注册中心以便其他的项目获取此服务对象

package org.spring.springboot.dubbo.impl;
​
import com.alibaba.dubbo.config.annotation.Service;
import org.spring.springboot.domain.City;
import org.spring.springboot.dubbo.CityDubboService;
import org.springframework.beans.factory.annotation.Autowired;
​
/**
 * 城市业务 Dubbo 服务层实现层
 *
 * Created by bysocket on 28/02/2017.
 */
// 注册为 Dubbo 服务
@Service(version = "1.0.0")
public class CityDubboServiceImpl implements CityDubboService {
​
    public City findCityByName(String cityName) {
        return new City(1L,2L,cityName,"是我的故乡");
    }
}

2.springboot-dubbo-client服务消费者项目

1.项目的结构图

client项目结构图.png

2.pom.xml的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>springboot</groupId>
    <artifactId>springboot-dubbo-client</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>springboot-dubbo 客户端:: 整合 Dubbo/ZooKeeper 详解 SOA 案例</name>
​
    <!-- Spring Boot 启动父依赖 -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.1.RELEASE</version>
    </parent>
​
    <properties>
        <dubbo-spring-boot>1.0.0</dubbo-spring-boot>
    </properties>
​
    <dependencies>
​
        <!-- Spring Boot Dubbo 依赖 -->
        <dependency>
            <groupId>io.dubbo.springboot</groupId>
            <artifactId>spring-boot-starter-dubbo</artifactId>
            <version>${dubbo-spring-boot}</version>
        </dependency>
​
        <!-- Spring Boot Web 依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
​
        <!-- Spring Boot Test 依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
​
        <!-- Junit -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
​
    </dependencies>
</project>
3.application.properties

## 避免和 server 工程端口冲突
server.port=8082
## Dubbo 服务消费者配置
spring.dubbo.application.name=consumer
## Dubbo 服务对象的注册中心zookeeper的地址和端口
spring.dubbo.registry.address=zookeeper://192.168.182.3:2181
##  服务对象的被注入的包扫描范围
spring.dubbo.scan=org.spring.springboot

4.ClientApplication.java项目启动入口

package org.spring.springboot;
​
import org.spring.springboot.dubbo.CityDubboConsumerService;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
​
/**
 * Spring Boot 应用启动类
 *
 * Created by bysocket on 16/4/26.
 */
// Spring Boot 应用的标识
@SpringBootApplication
public class ClientApplication {
​
    public static void main(String[] args) {
        // 程序启动入口
        // 启动嵌入式的 Tomcat 并初始化 Spring 环境及其各 Spring 组件
        ConfigurableApplicationContext run = SpringApplication.run(ClientApplication.class, args);
        //CityDubboConsumerService cityService = run.getBean(CityDubboConsumerService.class);
        //cityService.printCity();
    }
}
5.实体对象City和Server项目保持一样
6.CityDubboService.java服务对象的接口也保持和Server项目一致
7.CityDubboConsumerService.java是一个调用服务的测试类(可以不理会)

package org.spring.springboot.dubbo;
​
import com.alibaba.dubbo.config.annotation.Reference;
import org.spring.springboot.domain.City;
import org.springframework.stereotype.Component;
​
/**
 * 城市 Dubbo 服务消费者
 *
 * Created by bysocket on 28/02/2017.
 */
@Component
public class CityDubboConsumerService {
​
    //自动注入服务对象(与包扫描相关)
    @Reference(version = "1.0.0")
    CityDubboService cityDubboService;
​
    public String printCity(String cityName) {
        //String cityName="温岭";
        City city = cityDubboService.findCityByName(cityName);
        return city.toString();
    }
}
8.CityController.java与前端交互的action

package org.spring.springboot.controller;
​
import org.spring.springboot.domain.City;
import org.spring.springboot.dubbo.CityDubboService;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
​
import com.alibaba.dubbo.config.annotation.Reference;
​
@Controller
public class CityController {
    
    //自动注入服务对象(与包扫描相关)
    @Reference(version = "1.0.0")
    CityDubboService cityDubboService;
    /*@Autowired
    private CityDubboConsumerService cityDubboConsumerService;*/
​
    @RequestMapping("/")
    @ResponseBody
    public String index(){
        return "hello,springboot";
    }
    
    @RequestMapping("/getCity")
    @ResponseBody
    public String getCity(){
        //String city = cityDubboConsumerService.printCity("赣州");
        City city = cityDubboService.findCityByName("赣州");
        return city.getCityName()+city.getDescription();
    }
    
}

3.先启动zookeeper服务器,然后再启动springboot-dubbo-Server项目,再启动Springboot-dubbo-client项目.

确定要放弃本次机会?
福利倒计时
: :

立减 ¥

普通VIP年卡可用
立即使用
ldtkCoder
关注 关注
  • 1
    点赞
  • 踩
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
  • 分享
    复制链接
    分享到 QQ
    分享到新浪微博
    扫一扫
  • 举报
    举报
专栏目录
参与评论 您还未登录,请先 登录 后发表或查看评论
ldtkCoder

博客等级

码龄8年
10
原创
25
点赞
73
收藏
15
粉丝
关注
私信

热门文章

  • POI 出现的问题: org.apache.commons.collections4.ListValuedMap 13988
  • 高德地图路线规划-获取校车行驶的最优路线算法 4939
  • eclipse如何为java项目生成API文档、JavaDoc 4027
  • 带权重的随机算法的快速实现 3509
  • 高德API 点击地图弹出信息窗体显示经纬度坐标以及地址 2899

分类专栏

  • git
    1篇
  • 文档笔记
    4篇
  • springboot
    1篇
  • excel导入
    1篇
  • 高德API
    2篇

展开全部 收起

上一篇:
zookeeper安装
下一篇:
带权重的随机算法的快速实现

最新评论

  • POI 出现的问题: org.apache.commons.collections4.ListValuedMap

    残忍恶汉!: 兄弟你说的太对了,按照你的吧4-4.0 改成4-4.1.就ok了

  • easyui 实现只有年月的选择器

    cenghejian0487: 你指望一个抄文章得告诉你啥

  • easyui 实现只有年月的选择器

    cenghejian0487: 你指望一个抄文章得告诉你啥

  • easyui 实现只有年月的选择器

     IqOahz: 博主您好, 这块我不太懂, 请教一下. IE8不兼容有办法吗, 说什么 'span' 为空或不是对象. 其他浏览器包括IE11都可以

  • 高德地图路线规划-获取校车行驶的最优路线算法

    weixin_51643078: 该算法对内存要求高吗

大家在看

  • 【C语言刷题】第十一天:加量加餐继续,代码题训练,融会贯通IO模式
  • 魔术方法__call__ 955
  • SOFA RPC中设计模式的应用
  • 蒙特卡洛方法:随机抽样的艺术与科学 695
  • 多线程同步机制:深入解析互斥锁的原理与实践 1382

最新文章

  • Java实现大文件分片上传,并暂存到Mysql数据库
  • Git 使用码云的远程仓库管理项目代码
  • 高德地图路线规划-获取校车行驶的最优路线算法
2024年1篇
2020年1篇
2019年2篇
2018年5篇
2017年3篇

目录

展开全部

收起

目录

展开全部

收起

上一篇:
zookeeper安装
下一篇:
带权重的随机算法的快速实现

分类专栏

  • git
    1篇
  • 文档笔记
    4篇
  • springboot
    1篇
  • excel导入
    1篇
  • 高德API
    2篇

展开全部 收起

目录

评论
被折叠的  条评论 为什么被折叠? 到【灌水乐园】发言
查看更多评论
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值