前言:
之前,其实搭建过一套Eclipese的分布式,但是当初没有写博客,没有记录,现在这次搭建的是Idea的,还是遇到了一些其他的问题,这里记录学习一下。
整体框架:
整体流程是以core为核心模块,middleware为中间模块,记录公共类方法。manage为抽象业务模块,实现日志,权限。business为基础业务模块,主要是基础档案。order,stock,promotion为其他的个性化定制业务模块。
SpringBoot
整个框架的搭建是以SpringBoot为主,idea中创建SpringBoot比较简单
File-> New ->Spring initiailzr
关于主子工程的创建:
在创建完成的主工程上,点击New--> Module 创建子工程,完成后在主的pom.xml中会有显示
整个项目工程图 如下
事实上原本的eclipese中项目工程是这样的,当然 现在idea中 其他几个模块都套在core中
数据库中间介-MyCat
在下载MyCat之前 先需要整合MySQL
这边我用的是MySQL5.7 MyCat1.6.7
MySql的配置 主要是增加了 my.ini
具体如下
发现没有data目录 不要手工创建
启动mysql服务 net start mysql
MyCat具体配置安装:主要分为3个部分 server.xml schema.xml rule.xml
server.xml 主要配置逻辑数据库的信息,包括用户名、密码、端口等,也是代码中数据库连接的地址
这里有sequnceHandlerType 用于主键自增加策略
schema.xml 主要配置物理数据库的信息,逻辑数据库名称以及表和路由策略之间的关系等
rule.xml 主要配置路由策略、拆分规则等 这边我只用了mod-long策略 将staff 表拆分到 两个节点上
启动MyCat
然后程序中 的数据库连接 改为8066 那个Mycat的地址就可以了
其他操作不变
Orm框架-MyBatis
首先是pom.xml中的集成,同时在插件中 我引入了generator自动生成
这是我的generatorConfig.xml比较尴尬的是,跨工程模块之间的生成,貌似有问题,当时直接写死了绝对路径
注意一下,自动生成Mapper我这边没有带有@Mapper接口,需要手工自己加上,避免后面引用报错
关于Mapper扫描,我这边将mapper接口放入到midderware项目时就无法扫描了,后来在Application类上 增加@MapperScan注解去扫描,就能读取到middleware的mapper接口了
在实际工程编写时,当你使用@AutoWired注解时,idea会很贴心的提示你会有多个实现接口,以及没有实现接口。但是我Mybatis本来自己就没有实现接口,他是动态代理加反射,在编译期实现了这个接口的,然后idea它就信息弹出来了,当时我是懵的,但是实际上他自己可以跑,没啥问题
RPC框架-Dubbo
dubbo配置主要分为三大类,expose-interface暴露接口,provider服务提供者,cumsumer服务消费者。
需要说明的是,使用dubbo时,bean必须实现序列化,因为他底层是Netty,到时候传输的时候是要序列化的
看一下配置:首先是接口
然后是实现类:实现类在business模块中
看一下 xml的配置,这是是provider提供暴露接口的具体实现,以及缺省的zookeeper
这个是服务的消费者配置的xml
我将两个xml注入到springboot启动的时候
最后的引用如下 引用上下文之后,去get对应的Bean,强转结构后,去调用接口方法
当然作为register的zookeeper我也配置和启用了
因为是windows下的单机启动,所以这个真的很简单,就是启用server与client
缓存-Redis
事实上 不仅仅只是Redis 还用了Spring的EnableCache
第一次插入缓存,第二次读取相同的key缓存可以被命中。在Redis中存储的数据结构如下
然后这里发现了一个贼坑的问题,就是redis序列化对象的时候,一直乱码。网上百度说 因为sprinngBoot版本问题,高版本的需要自己实现编码,代码如下:
消息队列-RocketMQ
MQ主要是用来发送异步消息的,当然了我本地还是,但是MQ本身是可以搭建集群的,消息堆积处理能力很强。
首先,搭建MQ的时候,最好搭建一个Rocketmq-console控制台,因为这样看真的直观多了
打包完 相应的jar,启动服务后,就能看到相关的信息了
MQ的jar的引用,千万不要把fastJSON给忘记了
看一下程序的处理,我简单的封装了一点
实际业务代码如下:
今天 发现调用MQ发送时一直报10911端口没有,但是我想了半天,我又不用配置这个,为什么非要这么写,后来Debug到底层代码,百度了一下,走了VIP通道,然后VIP通道默认要这个。后来修改了自己的broker的配置文件如下,增加了最后两行
最后是启用nameServer与broker。
nameServer的启动没啥好说的,就是直接启动,broker的启动的时候,我带上了autoCreateTopicEnable=true
源码地址:
https://github.com/shengjieTang4419/Distributed_CoreProject.git