微服务架构案例(04):中间件集成,公共服务封装
2019-11-05 16:08
本文源码:GitHub·点这里 || GitEE·点这里
更新进度(共6节):
01:项目技术选型简介,架构图解说明
02:业务架构设计,系统分层管理
03:数据库选型,业务数据设计规划
04:中间件集成,公共服务管理
一、中间件简介
中间件是基础软件的一类, 属于复用性极高的软件。处于操作系统软件与应用程序的之间。是一种独立的系统软件,也可以是公共的服务程序,分布式架构系统借助中间件,可以在不同的技术之间共享资源,或者不同的服务直接传递信息。中间件位操作系统之上,管理计算机资源和网络通讯。是连接两个独立应用程序或独立系统的软件,例如:
消息队列中间件,在两个服务之间进行异步的消息传递;
数据缓存中间件,缓存整合系统的热点数据,提高程序的响应速度;
Nginx中间件,提供负载均衡,服务代理,等功能;
二、公共服务简介
公共服务,顾名思义就是系统内通用的服务,例如用户身份验证,消息发送,监控预警,网关服务等。
该案例的中间件和公共服务,都是基于Feign接口统一的方式提供服务。
三、中间件集成
1、消息中间件
RocketMq简介
RocketMq 是一款分布式、队列模型的消息中间件,有两个核心角色:消息生产者和消息消费者。作为高并发系统的核心组件之一,能够帮助业务系统解构提高系统稳定性。
应用流程
消息生产者
@Component
public class MsgSendService {
@Resource
private ProducerConfig producerConfig ;
public void sendMsg (MsgWrap msgWrap) {
producerConfig.sendMsg(msgWrap.getGroup(),msgWrap.getTopic(),
msgWrap.getTag(),msgWrap.getContent());
}
}
消息消费者
@Component
@Consumer(group = MsgRoute.husky_group_1,
topic = MsgRoute.husky_topic_1 ,
tag = MsgRoute.husky_tag_1)
public class UserSearchListener implements MsgReadService {
@Resource
private BookEsAnalyFeign bookEsAnalyFeign ;
@Override
public void readMsg(String msg) throws Exception {
LOGGER.info("【用户搜索消息监听 Msg】:{}",msg) ;
// 转发请求数据分析服务
bookEsAnalyFeign.sendBookEsMsg(msg);
}
}
提供Feign接口
@RestController
public class UserSearchController implements UserSearchFeign {
@Resource
private SendMsgService sendMsgService ;
@Override
public void sendBookSearch(String msgContent) {
MsgWrap msgWrap = new MsgWrap() ;
msgWrap.setContent(msgContent);
msgWrap.setGroup(MsgRoute.husky_group_1);
msgWrap.setTopic(MsgRoute.husky_topic_1);
msgWrap.setTag(MsgRoute.husky_tag_1);
sendMsgService.sendMsg(msgWrap);
}
}
2、缓存中间件
Redis简介
Redis 是一个基于内存的高性能key-value数据库。对高并发系统提供各种场景的支撑:热点数据缓存,计数器,流量削峰等。
应用流程
封装操作方法
@Service
public class RedisServiceImpl implements RedisService {
@Resource
private RedisTemplate