MQ
1.rabbitMq
rabbitMq 几万级数据量,基于erlang语言开发,因此响应速度快些,并且社区活跃度比较活跃,可视化界面。缺点就是数据吞吐量相对与小一些,并且是基于erlang语言开发,比较重的问题难以维护。
Queue
消息队列,提供了FIFO的处理机制,具有缓存消息的能力。rabbitmq中,队列消息可以设置为持久化,临时或者自动删除。
- 设置为持久化的队列,queue中的消息会在server本地硬盘存储一份,防止系统crash,数据丢失
- 设置为临时队列,queue中的数据在系统重启之后就会丢失
- 设置为自动删除的队列,当不存在用户连接到server,队列中的数据会被自动删除
Exchange
类似于数据通信网络中的交换机,提供消息路由策略。rabbitmq中,producer不是通过信道直接将消息发送给queue,而是先发送给Exchange。一个Exchange可以和多个Queue进行绑定,producer在传递消息的时候,会传递一个ROUTING_KEY,Exchange会根据这个ROUTING_KEY按照特定的路由算法,将消息路由给指定的queue。和Queue一样,Exchange也可设置为持久化,临时或者自动删除。
Binding
所谓绑定就是将一个特定的 Exchange 和一个特定的 Queue 绑定起来。Exchange 和Queue的绑定可以是多对多的关系。
2.rocketMq
rocketMq几十万级别数据量,基于Java开发,应对了淘宝双十一考验,并且文档十分的完善,拥有一些其他消息队列不具备的高级特性,如定时推送,其他消息队列是延迟推送,如rabbitMq通过设置expire字段设置延迟推送时间。又比如rocketmq实现分布式事务,比较可靠的。
RocketMQ是开源的消息中间件,它主要由NameServer,Producer,Broker,Consumer四部分构成。
NameServer:NameServer主要负责Topic和路由信息的管理,功能类似Dubbo的zookeeper。
Producer:消息生产者,负责产生消息,一般由业务系统负责产生消息。
Broker:消息中转角色,负责存储消息,转发消息。
Consumer:消息消费者,负责消息消费,一般是后台系统负责异步消费。
Sentinel熔断(降级)/限流
熔断参数:
资源名/熔断策略(慢调用比例/异常比例/异常个数)/熔断时长/请求数/统计时长/阈值
单点登陆系统实现
为什么要用单点登陆系统
用户通过不同系统登陆,不同系统调用统一的认证授权服务,然后统一调用数据库.
解决方案1: 用户登陆成功以后,将用户登陆状态存储到redis数据库
说明: 用户登录成功后,会基于UUID生成一个token,然后与用户信息绑定在一起存储到数据库.
后续用户在访问资源时,基于token从数据库查询用户状态,这种方式因为要基于数据库存储和查询用户状态,所以性能表现一般.
解决方案2:用户登陆成功以后,将用户信息存储到token(令牌),然后写到客户端进行存储。
说明: 在这套方案中,用户登录成功后,会基于JWT技术生成一个token,用户信息可以存储到这个token中.
单点具体实现
1.定义Spring Security配置类,为了配置认证规则
2.定义配置类 public class Oauth2Config extends AuthorizationServerConfigurerAdapter
为了安全规则/配置检验规则/令牌生成规则
后续用户在访问资源时,对token内容解析,检查登录状态以及权限信息,无须再访问数据库.
构建登陆系统模块需要实现---接受前端请求并传递给后端,将后端返回的数据绑定在Token上传给前端.
构建(JWT)配置类,用于生成令牌(具体就是实现一下AuthorizationServerConfigurerAdapter,重写他的方法)
三个方法:认证服务安全配置器/客户端详细服务配置器/认证服务终端配置器
配置:
1.对什么请求进行认证(默认是post)
2.对用户信息(将来绑定到Token中)进行规定