微服务案例引入及问题剖析

一. 案例说明

本部分我们按照普通⽅式模拟⼀个微服务之间的调⽤(后续我们将⼀步步使⽤
Spring Cloud 的组件对案例进⾏改造)。
拉勾 App ⾥有这样⼀个功能: ⾯试直通⻋ ,当求职⽤户开启了⾯试直通⻋之后,会
根据企业客户的招聘岗位需求进⾏双向匹配。其中有⼀个操作是:为企业⽤户开启
⼀个定时任务,根据企业录⼊的⽤⼈条件,每⽇匹配⼀定数量的应聘者 投递 到企业
的资源池中去,那么系统在将匹配到的应聘者投递到资源池的时候需要先检查:此
时应聘者默认简历的状态 ( 公开 / 隐藏 ) ,如果此时默认简历的状态已经被应聘者设置
隐藏 ,那么不再执⾏ 投递 操作。“ ⾃动投递功能 ⾃动投递微服务 中, 简历
状态查询功能 简历微服务 中,那么就涉及到 ⾃动投递微服务 调⽤ 简历微服务
查询简历。在这种场景下, ⾃动投递微服务 就是⼀个服务消费者, 简历微服务
是⼀个服务提供者。

二. 案例数据库环境准备

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for r_resume
-- ----------------------------
DROP TABLE IF EXISTS `r_resume`;
CREATE TABLE `r_resume` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `sex` varchar(10) DEFAULT NULL COMMENT '性别',
  `birthday` varchar(30) DEFAULT NULL COMMENT '出生日期',
  `work_year` varchar(100) DEFAULT NULL COMMENT '工作年限',
  `phone` varchar(20) DEFAULT NULL COMMENT '手机号码',
  `email` varchar(100) DEFAULT NULL COMMENT '邮箱',
  `status` varchar(80) DEFAULT NULL COMMENT '目前状态',
  `resumeName` varchar(500) DEFAULT NULL COMMENT '简历名称',
  `name` varchar(40) DEFAULT NULL,
  `createTime` datetime DEFAULT NULL COMMENT '创建日期',
  `headPic` varchar(100) DEFAULT NULL COMMENT '头像',
  `isDel` int(2) DEFAULT NULL COMMENT '是否删除 默认值0-未删除 1-已删除',
  `updateTime` datetime DEFAULT NULL COMMENT '简历更新时间',
  `userId` int(11) DEFAULT NULL COMMENT '用户ID',
  `isDefault` int(2) DEFAULT NULL COMMENT '是否为默认简历 0-默认 1-非默认',
  `highestEducation` varchar(20) DEFAULT '' COMMENT '最高学历',
  `deliverNearByConfirm` int(2) DEFAULT '0' COMMENT '投递附件简历确认 0-需要确认 1-不需要确认',
  `refuseCount` int(11) NOT NULL DEFAULT '0' COMMENT '简历被拒绝次数',
  `markCanInterviewCount` int(11) NOT NULL DEFAULT '0' COMMENT '被标记为可面试次数',
  `haveNoticeInterCount` int(11) NOT NULL DEFAULT '0' COMMENT '已通知面试次数',
  `oneWord` varchar(100) DEFAULT '' COMMENT '一句话介绍自己',
  `liveCity` varchar(100) DEFAULT '' COMMENT '居住城市',
  `resumeScore` int(3) DEFAULT NULL COMMENT '简历得分',
  `userIdentity` int(1) DEFAULT '0' COMMENT '用户身份1-学生 2-工人',
  `isOpenResume` int(1) DEFAULT '3' COMMENT '人才搜索-开放简历 0-关闭,1-打开,2-简历未达到投放标准被动关闭 3-从未设置过开放简历',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2195388 DEFAULT CHARSET=utf8;

三. 案例⼯程环境准备

我们基于 SpringBoot 来构造⼯程环境,我们的⼯程模块关系如下所示:

四. 示例代码

示例代码请点击

五. 案例代码问题分析

我们在⾃动投递微服务中使⽤ RestTemplate 调⽤简历微服务的简历状态接⼝时
Restful API 接⼝)。在微服务 分布式集群环境 下会存在什么问题呢?怎么解决?
存在的问题:
1 )在服务消费者中,我们把 url 地址硬编码到代码中,不⽅便后期维护。
2 )服务提供者只有⼀个服务,即便服务提供者形成集群,服务消费者还需要⾃⼰实
现负载均衡。
3 )在服务消费者中,不清楚服务提供者的状态。
4 )服务消费者调⽤服务提供者时候,如果出现故障能否及时发现不向⽤户抛出异常
⻚⾯?
5 RestTemplate 这种请求调⽤⽅式是否还有优化空间?能不能类似于 Dubbo 那样
玩?
6 )这么多的微服务统⼀认证如何实现?
7 )配置⽂件每次都修改好多个很麻烦!?
8 ....
上述分析出的问题,其实就是微服务架构中必然⾯临的⼀些问题:
1 )服务管理:⾃动注册与发现、状态监管
2 )服务负载均衡
3 )熔断
4 )远程过程调⽤
5 )⽹关拦截、路由转发
6 )统⼀认证
7 )集中式配置管理,配置信息实时⾃动更新
这些问题, Spring Cloud 体系都有解决⽅案,后续我们会逐个学习。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值