springboot 多模块 -- 将web拆分出去 - 流动计算架构
前言:
之前将各层都拆分出去, 作为一个独立的可替换的子模块. 感觉比以前确实是灵活了一些.
不管是电商项目, 还是现在公司做的项目, 其中, 有很多的业务逻辑, 都是一样的, 但是由于不在一个系统中, 大家需要进行重复的工作. 有的拷贝还好, 但是有的, 没法直接拷贝. 相当的蛋疼. 能不能, 将业务逻辑独立出去, 供所有的展示层调用呢?
是不是可以使用前一篇介绍的 dubbo 呢?
框架改造:
前一篇, 通过多模块, 将各层拆分出去, 各自变成了一个独立的项目. 这里, 先将之前的稍微修改了下, 主要是改了项目名称, 加了一个common项目, 放一些共用的东西.
common我也是用 springboot 建的, 只不过将入口那里注释掉了. 这里, 除了web有入口程序, 其他的入口全都注释掉了.

改造后的目录结构:

这里要注意开启service中的入口程序, 创建application.yml文件, 将之前在web中, 对mybatis的配置部分, 全部迁移到service中, 包括 MybatisConfig 和 MybatisMapperScannerConfig.
迁移哦, 不是复制. web端不需要这些东西了.
具体的改造过程, 就不贴了, 代码我会上传到码云中. 地址: https://gitee.com/elvinle/bookshop/tree/master/bookshop
集成dubbo zookeeper:
1. 业务层改造 -- 服务端
pom.xml 中加入:
<!--dubbo相关-->
<!-- https://mvnrepository.com/artifact/com.gitee.reger/spring-boot-starter-dubbo -->
<dependency>
<groupId>com.gitee.reger</groupId>
<artifactId>spring-boot-starter-dubbo</artifactId>
<exclusions>
<exclusion>
<groupId>org.jboss.netty</groupId>
<artifactId>netty</artifactId>
</exclusion>
</exclusions>
</dependency>
application.yml:
spring:
dubbo:
application: bookshop_provider
registry:
address: 192.168.153.129
protocol: zookeeper
port: 2181
protocol:
name: dubbo
port: 20880
base-package: cn.elvinle.manager.simpl
application : 名称自己随便取一个都可以, 不重复就好.
address : 前面zookeeper部署的电脑ip.
port: zookeeper服务的端口号
registry.protocol : 注册协议, zookeeper注册中心, 默认2181端口
dubbo.protocol : 服务协议, 使用 dubbo
dubbo.port : 服务端口, 默认20880
timeout : 调用超时, 默认为1000ms.
base-package : 客户端被扫描的包
这里使用的是单机部署, 没有使用zookeeper集群. 后面有机会的话, 会使用到.
代码改造:
package cn.elvinle.manager.simpl; import cn.elvinle.manager.dao.mapper.UserMapper;
import cn.elvinle.manager.pojo.User;
import cn.elvinle.manager.service.UserService;
import com.alibaba.dubbo.config.annotation.Service;
import org.springframework.beans.factory.annotation.Autowired; import java.util.List; @Service
public class UserSImpl implements UserService { @Autowired
private UserMapper userMapper; @Override
public List<User> getAll() { List<User> list = userMapper.getAll(); System.out.println("服务端读取到数据:" + list); return list;
}
}
这里貌似与之前的没什么不同, 但是, 这里的Service 注解, 不是之前的那个了, 而是 com.alibaba.dubbo.config.annotation.Service
2. web 集成 -- 客户端
pom.xml文件加入引用:
<!--dubbo相关-->
<!-- https://mvnrepository.com/artifact/com.gitee.reger/spring-boot-starter-dubbo -->
<dependency>
<groupId>com.gitee.reger</groupId>
<artifactId>spring-boot-starter-dubbo</artifactId>
<exclusions>
<exclusion>
<groupId>org.jboss.netty</groupId>
<artifactId>netty</artifactId>
</exclusion>
</exclusions>
</dependency>
application.yml
spring:
dubbo:
application: web_consumer
registry:
address: 192.168.153.129
protocol: zookeeper
port: 2181
base-package: cn.elvinle.manager.web.controller
consumer:
timeout: 10000
代码改造:
package cn.elvinle.web.controller; import cn.elvinle.manager.pojo.User;
import cn.elvinle.manager.service.UserService;
import com.alibaba.dubbo.config.annotation.Reference;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import java.util.List; @RestController
@RequestMapping("user")
public class UserController { @Reference
private UserService userService; @RequestMapping("index")
public List<User> index(){ List<User> all = userService.getAll(); System.out.println("客户端读取到数据: " + all); return all;
}
}
这里, 可以看到, 不再是使用Autowire了, 而是使用Reference注解, 是dubbo里面的.
3. 注意:
这里有个需要注意的地方, 就是传输的类, 必须实现 Serializable 接口, 表示支持序列化, 否则会报错的.
结果展示:

从浏览器上看, 确实访问到了数据. 再来看一下, 后台可打印了我要的信息.


再来看一下注册监测中心:

看看提供者:

消费者:

springboot 多模块 -- 将web拆分出去 - 流动计算架构的更多相关文章
- SpringBoot多模块项目打包问题
项目结构图如下: 在SpringBoot多模块项目打包时遇见如下错误: 1.repackage failed: Unable to find main class -> [Help 1] 解决步 ...
- springboot多模块开发以及整合dubbo\zookeeper进行服务管理
之前研究了springboot单工程的使用,参考git地址:https://github.com/qiao-zhi/springboot-ssm 下面研究springboot多模块开发的过程. 1.模 ...
- 使用IDEA构建Spring-boot多模块项目配置流程
使用IDEA构建Spring-boot多模块项目配置流程 1.创建项目 点击Create New Project 在左侧选中Spring Initializer,保持默认配置,点击下一步. 在Grou ...
- HT for Web中3D流动效果的实现与应用
流动效果在3D领域有着广泛的应用场景,如上图中医学领域可通过3D的流动直观的观察人体血液的流动,燃气领域可用于监控管道内流动的液体或气体的流向.流速和温度等指标. 如今企业数据中心机房普遍面临着设备散 ...
- 使用nodejs的http模块创建web服务器
使用nodejs的http模块创建web服务器 laiqun@msn.cn Contents 1. web服务器基础知识 2. Node.js的Web 服务器 3. 代码实现 1. web服务器基础知 ...
- SpringBoot的第一个web项目
这一节主要是讲springboot搭建简单的web项目. 首先pom文件新增spring-boot-starter-web依赖,pom文件如下所示 <?xml version="1.0 ...
- eclipse中创建多模块maven web项目
本文讲述在eclipse中创建分模块maven web项目. 暂时将一个项目分为controller:service:dao以及父类模块四部分. 1.创建父类模块. 创建一个简单的maven proj ...
- 用 requests 模块从 Web 下载文件
用 requests 模块从 Web 下载文件 requests 模块让你很容易从 Web 下载文件,不必担心一些复杂的问题,诸如网络错误.连接问题和数据压缩.requests 模块不是 Python ...
- springboot 之 使用jetty web容器
springboot 中默认的web容器是tomcat. 在maven 的pom 文件中加入如下依赖,便可使用tomcat 容器. <dependency> <groupId> ...
随机推荐
- 泡泡机器人SLAM 2019
LDSO:具有回环检测的直接稀疏里程计:LDSO:Direct Sparse Odometry with Loop Closure Abstract—In this paper we present ...
- 终端简单使用 &vim编写代码
vim简单实用 & 用vim编写代码 ## 简单介绍 ## vi 1.c 建立1.c(文件存在,则打开1.c) vi共有三种模式: 按esc进入指令模式 按i进入编辑模式(按i光标位置不变 ...
- NSString copy && strong
http://www.cocoachina.com/ios/20150512/11805.html 我们在声明一个NSString属性时,对于其内存相关特性,通常有两种选择(基于ARC环境):stro ...
- 最大流最小割学习 基本知识 | 证明 | FF算法
可行流 : 能流过去就行,不一定是最大流. 最大流:能流到的最大流量.(可能不只一个) 解决最大流: Ford-Fulkerson方法 最小割:从图中去除一些边,使得源点S到汇点T不连通,去除的这些边 ...
- 设置cxGrid中RichEdit输入内容的格式
设置cxGrid中RichEdit输入内容的格式 (2013-09-05 23:25:31) 转载▼红鱼儿新浪博客 分类: Delphi 遇到这样的问题,利用cxGrid,将一列定义为RichEd ...
- MySQL5.7Gtid主从复制总是遇到日志被清等出现无法正常主从复制
最近最是在MySQL5.7上的的gtid主从复制问题总是遇上下面问题: Last_Error: Coordinator stopped because there were error(s) in t ...
- [机翻] WIRER ON THE WIRE - SIGNALR协议的非正式描述
原文 原文很简单,以下为机翻 WIRER ON THE WIRE - SIGNALR协议的非正式描述 我已经看到询问有关SignalR协议的描述的问题出现了很多.哎呀,当我开始关注SignalR时,我 ...
- 【文文殿下】[AH2017/HNOI2017]礼物
题解 二项式展开,然后暴力FFT就好了.会发现有一个卷积与c无关,我们找一个最小的项就行了. Tips:记得要倍长其中一个数组,防止FFT出锅 代码如下: #include<bits/stdc+ ...
- javap 反汇编class文件
用法: javap 参数 class文件路径 其中, 可能的选项包括: -help --help -? 输出此用法消息 -version 版本信息 -v -verbose 输出附加信息 -l 输出行号 ...
- Testing - 软件测试知识梳理 - 软件可靠性测试
软件可靠性的基本概念 错误,缺陷,故障和失效 错误:指的是软件在生命周期中各个阶段的状态和行为与人们的期待不一致的偏差,不单单是软件系统本身,中间产品的偏差也算是软件错误 缺陷:指的是软件中一切不好的 ...