框架用多了真的会死人的,spring-cloud全家桶与mybitais 集成完整示例(附下载)
题外话:
看到这一长串包含各种技术名词的标题,一路走来感觉研发深深的被各种框架给绑架了,从我们刚出生最简单的jsp,servlet打天下,到spring mvc的盛行,再到现在spring-boot,spring-cloud全家桶,还有各种前端框架什么vue,React,Angular,requerjs,还有什么大数据的框架就不说了等等。怎么也有快100种了吧。我学不学是我的兴趣,但是你换个公司就得面对新的框架的要求,想想都累,但是那些企业招聘的内容上,谁不写这些东西!!!
说到底,技术负责人所谓的随大流就是一种资源的浪费,浪费公司成本,浪费员工学习时间,而底层的能力那些技术负责人他真的会么?
个人对框架的理解:
1、任何框架首先是为了解决实际的业务发展问题。而不是凑热闹。
2、框架是随着团队以及业务的发展长期沉淀出来的,最终核心是为业务开发做基础支撑,是去提高开发效率,适应业务发展。而不是来一个项目我就整一个框架,看谁整的新鲜。
3、能做减法做减法,任何时候添加一个技术组件,直接的结果就是增加学习成本以及造成可能运行期故障。
4、只要业务能跑的好,能单级不集群,能一个war,决不搞微服务拆分和前后端分离。
5、重构不是换新。
6、框架并不代表能力,支撑大业务量的运行以及减少研发成本才是本事。
7、技术人员了解一下前言框架的设计思想也是极好的。
8、不要和产品经理打完架,然后再前后端打架。
9、头发更重要。
10、以后再有哪个技术经理说你连spring-cloud都不会,你就问他你知道byte的取值范围是多少么,80%肯定不知道。
~题外话完~
有小伙伴想让发个spring-cloud的代码实例研究一下,所以就抽业务时间写了一个。也就是那些东西,网上也一大堆文章了。不喜欢看过程的直接去结尾下载源码吧。
spring cloud的这几个组件的调用关系:
其中:
1、euraka为服务注册及状态监控组件,其他微服务都注册到这上面。它还提供一个监控web界面。euraka可以用zookeeper替换,但是需要安装zookeeper。这些服务一般都在内网,不直接对外调用,要调用走zuul。
2、zuul,提供服务调用网关,类似于ngnix,提供服务跳转,映射,黑白名单等等。所实话,走ngnix其实就够了了。
3、feign:服务调用的封装,直接帮你把服务的查找,请求和返回结果给你包装好了,你只需要关注输入和输出结果就行。
当然spring-cloud还有很多其他的组件,什么自动配置,bus等可以自己研究。who care!
本实例主要业务逻辑是:
在user-manager工程中查询用户基本信息,然后根据id去日志服务(log-service)去查询用户操作日志。
本示例代码对应工程:
具体在ide中的代码如下:
其中:user-manager里面集成了mybitais,无配置文件的方式实现了一个简单查询。主要是为了演示集成的过程。
介绍下sping-cloud的几个常用的注解(annotation):
@EnableEurekaServe:用于标注我是一个Eureka注册中心;
@EnableEurekaClient:用于标注我是一个服务,用于注册到Eureka注册中心;
@EnableZuulProxy:用于标注我是一个zuul服务网关;
@EnableFeignClients 用于标注我要使用Feign来调用服务,默认会启动ribbon来做服务的负载调用;
@EnableHystrix 用于标注启动了服务降级机制(容错机制)和@EnableFeignClients 一起使用。
对应各个注解在工程工程中的使用位置:
整个工程用到了spring-boot,也就是各种starter,推荐阅读另一篇文章:spring-boot相关示例
当然spring-boot就是一推基于maven模块化的封装,所以也推荐阅读另一篇文章:「干货分享」模块化编程及Maven配置最佳实践之一
那么都用到哪些starter:
1、Eureka服务注册中心的starter:
spring-cloud-starter-netflix-eureka-server
2、eureka客户端,也就是微服务,是要注册到Eureka服务注册中心的
spring-cloud-starter-netflix-eureka-client
3、zuul网关,当然需要配合spring-cloud-starter-netflix-eureka-client一起,因为他也是要作为一个服务注册到服务中心的。
spring-cloud-starter-netflix-zuul
4、feign和hystrix的starter
spring-cloud-starter-netflix-hystrix
spring-cloud-starter-openfeign
5、mybitais的starter
mybatis-spring-boot-starter
各种starter在工程中使用的对应关系:
具体的maven配置看代码吧。上图已经基本说清楚了,就不粘贴大段代码了。
端口说明
先说一下这几个工程端口使用说明,方便大家理解接口关系:
配置文件YML说明
话说yml这种树形结构不一定适合所有人,一是占用篇幅太长,二是这种手动对齐方式很容易出错,出了错你找都不好找。感觉能properties还是用回去吧。
1、Eureka服务中心,工程:services-center:
#服务端口号
server:
port: 8200
#服务名称
spring:
application:
name: service-eureka-center #服务中心自己本身也是个服务,也需要起个名字
security:
basic:
enable: true #开启基于HTTP basic的认证,可以不要,从安全考虑还是需要。
user:
name: test
password: 123456
eureka:
instance:
hostname: 127.0.0.1
#注册地址,另一个集群的地址。
client:
serviceUrl:
defaultZone: http://${spring.security.user.name}:${spring.security.user.password}@${eureka.instance.hostname}:8300/eureka/
#是否将自己注册到Eureka服务中,集群的时候为true,非集群是为false
register-with-eureka: true
#是否从Eureka中获取注册信息,集群的时候为true,非集群是为false
fetch-registry: true
微服务的配置文件,对应工程:log-service
#服务端口号
server:
port: 8101
#服务名称
spring:
application:
name: log-service
eureka:
instance:
#注册中心地址
hostname: 127.0.0.1
#客户端调用地址
client:
serviceUrl:
#此处的用户名密码和服务中心配置文件里面的一样
defaultZone: http://test:123456@${eureka.instance.hostname}:8200/eureka/
#因为应用为服务提供者,需要注册到注册中心
register-with-eureka: true
#是否需要从eureka上检索服务
fetch-registry: true
网关的配置文件,对应工程:services-gateway
server:
port: 8080 #服务端口
spring:
application:
name: service-zuul-gateway #指定服务名
###服务注册到eureka注册中心的地址
eureka:
client:
service-url:
defaultZone: http://test:123456@127.0.0.1:8200/eureka/
#由于需要被查找到用于调用,所以需要注册到注册中心
register-with-eureka: true
#是否需要从eureka上检索服务
fetch-registry: true
zuul:
routes: #定义服务转发规则
log-s: #路由名称
path: /log-service/** #匹配log-service开头的请求到log-service服务
serviceid: log-service
关于zuul的路由规则有很多,这里不详细一一说明了。大家去查资料脑补。
调用程序配置文件:对应工程:user-manager
里面有mybitais的数据源的配置。
#服务端口号
server:
port: 8110
#服务名称
spring:
#数据库数据源
datasource:
url: jdbc:mysql://localhost:3306/test?characterEncoding=utf-8&serverTimezone=UTC
username: root
password: root
driver-class-name: com.mysql.jdbc.Driver
#连接池配置
type: com.alibaba.druid.pool.DruidDataSource
initialSize: 1
minIdle: 3
maxActive: 20
eureka:
instance:
#注册中心地址
hostname: 127.0.0.1
#客户端调用地址
client:
serviceUrl:
defaultZone: http://test:123456@${eureka.instance.hostname}:8200/eureka/
#因为该应用为服务调用者,不注册
register-with-eureka: false
#是否需要从eureka上检索服务
fetch-registry: true
部分代码解释:
user-manager工程:
mybitais部分:
出了上面配置文件中指明数据源的配置外,然后就是在启动时加上各种mapper的扫描位置:
我这里写了一个简单的mapper,用于根据用户id查询用户信息和,具体如下:
数据表的脚本:
CREATE TABLE `tab_user` (
`id` varchar(32) DEFAULT NULL,
`username` varchar(255) DEFAULT NULL
)
数据查询和服务调用过程:
itemFeignClient代码:
因为都是通过网关访问,所以这里面所有的配置都是基于网关的信息。
其他几个工程的代码相对就很简单了,主要是注解配置上直接启动即可,具体大家看代码吧。
工程启动之后(顺序:服务中心services-center->微服务log-service->网关services-gateway->调用程序user-manager),访问测试结果,如果成功后如下:
eureka注册中心显示结果:
通过浏览器访问user-manager的controller之后返回正确结果(这里用了一个google浏览器的json美化插件json-handle):
很多组件还有一些配置细节,感兴趣大家可以多查资料了解一下,使用用的话还是有很多配置优化的地方。
说实话写了一身汗!!!
这几个组件的中式读法,自己整的,不一定准确:
ribbon 瑞本
Hystrix 嗨司最克斯
eureka 尤瑞克
zuul 走欧
feign 奋
~以上便是本次分享所有内容~
过程中有问题可以留言一起讨论。谢谢!
源码下载
为防止地址失效,所有下载链接都在公众号维护(公众号文章发布之后就不能改连接了),请关注公众号后,回复“R005” 获取完整源码。
框架用多了真的会死人的,spring-cloud全家桶与mybitais 集成完整示例(附下载)的更多相关文章
- Spring Boot + Spring Cloud 实现权限管理系统 (集成 Shiro 框架)
Apache Shiro 优势特点 它是一个功能强大.灵活的,优秀开源的安全框架. 它可以处理身份验证.授权.企业会话管理和加密. 它易于使用和理解,相比Spring Security入门门槛低. 主 ...
- spring cloud 入门,看一个微服务框架的「五脏六腑」
Spring Cloud 是一个基于 Spring Boot 实现的微服务框架,它包含了实现微服务架构所需的各种组件. 注:Spring Boot 简单理解就是简化 Spring 项目的搭建.配置.组 ...
- 从 Spring Cloud 看一个微服务框架的「五脏六腑」
原文:https://webfe.kujiale.com/spring-could-heart/ Spring Cloud 是一个基于 Spring Boot 实现的微服务框架,它包含了实现微服务架构 ...
- 从 Spring Cloud 看一个微服务框架的「五脏六腑」(转)
Spring Cloud 是一个基于 Spring Boot 实现的微服务框架,它包含了实现微服务架构所需的各种组件. 本文将从 Spring Cloud 出发,分两小节讲述微服务框架的「五脏六腑」: ...
- 浅谈现公司的Spring Cloud微服务框架
目录 说在前面 服务注册与发现 服务网关及熔断 配置中心 消息中心.服务链路追踪 小言 说在前面 本文偏小白,大佬慎入,若有错误或者质疑,欢迎留言提问,谢谢,祝大家新年快乐. spring cloud ...
- rpc框架dubbo学习入门及环境搭建(spring boot+Kotlin)
学习之前,确保有以下知识基础: Java网络编程 Socket传输数据 IO流 rpc简介及实现 rpc是remote procedure call的简写,意思为远程过程调用. rpc应用较多的情景是 ...
- 一句话概括下spring框架及spring cloud框架主要组件
作为java的屌丝,基本上跟上spring屌丝的步伐,也就跟上了主流技术.spring 顶级项目:Spring IO platform:用于系统部署,是可集成的,构建现代化应用的版本平台,具体来说当你 ...
- 【SSH进阶之路】一步步重构容器实现Spring框架——彻底封装,实现简单灵活的Spring框架(十一)
文件夹 [SSH进阶之路]一步步重构容器实现Spring框架--从一个简单的容器開始(八) [SSH进阶之路]一步步重构容器实现Spring框架--解决容器对组件的"侵入 ...
- SSH框架总结(帧分析+环境结构+示例源代码下载)
首先,SSH不是一个框架.而是多个框架(struts+spring+hibernate)的集成,是眼下较流行的一种Web应用程序开源集成框架,用于构建灵活.易于扩展的多层Web应用程序. 集成SSH框 ...
随机推荐
- Sqlite—修改语句(Update)
SQLite 的 UPDATE 语句用于修改表中已有的记录.可以使用带有 WHERE 子句的 UPDATE 查询来更新选定行,否则所有的行都会被更新. 基本语法:UPDATE table_name S ...
- Hadoop_MapReduce_03
1. MapReduce入门 1.1 MapReduce的思想 MapReduce的思想核心是"分而治之" , 适用于大量的复杂的任务处理场景 (大规模数据处理场景) . Map负 ...
- 集合系列 Queue(十):LinkedList
我们之前在说到 List 集合的时候已经说过 LinkedList 了.但 LinkedList 不仅仅是一个 List 集合实现,其还是一个双向队列实现. public class LinkedLi ...
- SQLserver、MySQL、ORCAL查询数据库、表、表中字段以及字段类型
一.SQLServer命令 1.查询SQLServer中的每个数据库 SELECT * from sysdatabases 2.查询SQLServer中指定数据库的所有表名 select name f ...
- Cesium 动态绘制点线面(附源码下载)
我写的这个点线面绘制融入了增删改的功能.其中可以通过手动点击地图进行动态绘制线面,也支持通过给定坐标数组来进行线面的增加.绘制好的线面,可以点击进行修改:以上介绍了我的大概的要给操作,下面以面的构建来 ...
- 快速搭建用于测试的rtsp协议网络流媒体数据服务
背景: 最近根据项目需求,在平台系统中加入了视频监控显示功能,但是限于没有提供真实可用的监控摄像头数据,通过EasyScreenLive快速搭建了一个rtsp的流媒体服务,下面将实现步骤分享给大家,为 ...
- C# 让你解决方案乱七八糟的DLL放入指定文件夹
嗯,大家的解决方案可能会有许多dll,这样不美观,而且也麻烦. 很多小白都不知道如何将这些dll放到如自己程序的bin文件夹下. 本渣今天来试着将dll复制到指定的文件夹下~ 比如我之前做的一个Win ...
- Ribbon负载均衡及Feign消费者调用服务
微服务调用Ribbon 简介 前面讲了eureka服务注册与发现,但是结合eureka集群的服务调用没讲. 这里的话 就要用到Ribbon,结合eureka,来实现服务的调用: Ribbon是Netf ...
- 误区以为父组件render一次,子组件会重新初始化
初学react的时候我有一个误区,以为父组件render的一次,会将子组件先卸载,再将子组件重新初始化,事实证明不是. 这是对react生命周期函数不太清楚. 父子组件都初始化后,父组件再render ...
- [PHP]关于连接MySQL的问题
概述 PHP中无论使用MySQL函数抑或PDO连接MySQL服务器,都允许有两种方式,一是通过TCP网络层,一是通过unix socket: PHP并没有给出指明用何种方式去连接数据库,决定使用何种方 ...