Producer生产者 Consumer:消费者 组成部分说明如下: Broker:消息队列服务进程,此进程包括两个部分:Exchange和Queue. Exchange:消息队列交换机,按一定的规则将消息路由转发到某个队列,对消息进行过虑. Queue:消息队列,存储消息的队列,消息到达队列并转发给指定的消费方. Producer:消息生产者,即生产方客户端,生产方客户端将消息发送到MQ. Consumer:消息消费者,即消费方客户端,接收MQ转发的消息. 消息发布接收流程: -----发送消…
header模式 header模式与routing不同的地方在于,header模式取消routingkey,使用header中的 key/value(键值对)匹配 队列. 案例: 根据用户的通知设置去通知用户,设置接收Email的用户只接收Email,设置接收sms的用户只接收sms,设置两种 通知类型都接收的则两种通知都有效. 发送数据 发送的时候发送了两个key /value对 那么上面就会两个队列接收. RPC RPC即客户端远程调用服务端的方法 ,使用MQ可以实现RPC的异步调用,基于D…
消费者需要写两个消费者 定义邮件的类 复制以前的代码到邮件类里面进行修改 最上面 声明队列的名称和交换机的名称 监听修改为email 的队列的名称 手机短信接收端 复制一份email的接收端的代码 改名叫做sms 队列的名称改成短信的队列名称 启动程序测试 先启动生产者 生产者启动后就发送了5条消息出去 可以看到我们新建的交换机 点击交换机进来,显示绑定了两个队列 我们的代码Routing Key设置的为空 可以看到每个队列都有5条消息 启动消费者,启动email的消费者 email消费者读取了…
路由模式: 1.每个消费者监听自己的队列,并且设置带统配符的routingkey. 2.生产者将消息发给broker,由交换机根据routingkey来转发消息到指定的队列. 创建测试用例 交换机的名称 清理场景 删除这个交换机 删除队列 再删除sms的队列 交换机的类型变成topic routingKey的变化 如果队列是inform.email.sms那么这两个队列都可以匹配上,#代表任意的字符,也可以代表是空的字符 绑定topic的交换机 发送消息 发送的routingKey是email和…
先常见生产者 复制02的代码 先改一下交换机的名称 还需要制定routingKey.因为是两个消息 所以指定了两个routingKey 这里修改为当前指定的交换机名称 交换机和队列在绑定的时候指定我们新定义的routingKey 交换机在定义的时候,类型设置为Direct 发送消息要指定routingKey.例如这里我要给email发送消息,那么就指定routingKey为Email 消费者 修改交换机的名称和交换机的类型 交换机绑定的时候指定routingKey 再创建短信的消费者 测试 运行…
队列在绑定交换机的时候可以指定routingKey, 路由模式: 1.每个消费者监听自己的队列,并且设置routingkey. 2.生产者将消息发给交换机,由交换机根据routingkey来转发消息到指定的队列. 例如下面指定的routingKey是error 下面这个设置了多个routingKey 一个是info 一个是error 还有一个是warrning routingKey 的作用,当消息发送到交换机的时候,会指定一个路由key. 假设我们在消息发送到交换机的时候指定的路由key是err…
Publish/subscribe:发布订阅模式 发布订阅模式: 1.每个消费者监听自己的队列. 2.生产者将消息发给broker,由交换机将消息转发到绑定此交换机的每个队列,每个绑定交换机的队列都将接收 到消息 中间多了个交换机 一个消息生产者先发送给交换机,由交换机把消息发送给各个队列.每个队列都有不同的消费者在监听 实现了发布一个消息 多个消费者都可以接收到这个消息了 如果把下面的队列干掉.那么红色圈出的部分和工作模式是相同的.工作对垒虽然没有交换机也会有一个默认的交换机. 所以说发布于订…
RabbitMQ有以下几种工作模式 : 1.Work queues 2.Publish/Subscribe 3.Routing 4.Topics 5.Header 6.RPC 1.Work queues work queues与入门程序相比,多了一个消费端,两个消费端共同消费同一个队列中的消息. 应用场景:对于 任务过重或任务较多情况使用工作队列可以提高任务处理的速度. 测试: 1.使用入门程序,启动多个消费者. 2.生产者发送多个消息. 结果: 1.一条消息只会被一个消费者接收: 2.rabb…
这是轮播图的原始文件 运行门户需要把 nginx启动起来 单独运行轮播图.把里面的css的引用都加上网址的url 这就是单独访问到的轮播图的效果 轮播图模板的地址: 阶段5 3.微服务项目[学成在线]·\day04 页面静态化\代码\index_banner.ftltest-freemarker的服务内.模板的html文件,复制过来.然后改了名字后缀叫做index_banner.ftl FreemarkerController内 新加一个方法 返回为轮播图的模板地址 http://localho…
提供了基于脚手架封装好的前端工程 H:\BaiDu\黑马传智JavaEE57期 2019最新基础+就业+在职加薪\阶段5 3.微服务项目[学成在线]·\day02 CMS前端开发\资料\xc-ui-pc-sysmanage.7z _all的是完整的.不带all的是手写的第一部分的 解压出来 ,这里应包括了所有的依赖 build构建工程相关的js webStorm打开 config里面有一些配置文件 index.js里面会设置代理 工程启动后对外暴露一个接口11000 sysConfig.js自己…
2.2 Oauth2认证 2.2.1 Oauth2认证流程 第三方认证技术方案最主要是解决认证协议的通用标准 问题,因为要实现 跨系统认证,各系统之间要遵循一定的 接口协议. OAUTH协议为用户资源的授权提供了一个安全的.开放而又简易的标准.同时,任何第三方都可以使用OAUTH认 证服务,任何服务提供商都可以实现自身的OAUTH认证服务,因而OAUTH是开放的.业界提供了OAUTH的多种实 现如PHP.JavaScript,Java,Ruby等各种语言开发包,大大节约了程序员的时间,因而OAU…
1.1 用户认证与授权 截至目前,项目已经完成了在线学习功能,用户通过在线学习页面点播视频进行学习.如何去记录学生的学习过程 呢?要想掌握学生的学习情况就需要知道用户的身份信息,记录哪个用户在什么时间学习什么课程:如果用户要购 买课程也需要知道用户的身份信息.所以,去管理学生的学习过程最基本的要实现用户的身份认证. 什么是用户身份认证? 用户身份认证即用户去访问系统资源时系统要求验证用户的身份信息,身份合法方可继续访问.常见的用户身份认 证表现形式有:用户名密码登录,指纹打卡等方式. 什么是用户…
2 Feign远程调用 在前后端分离架构中,服务层被拆分成了很多的微服务,服务与服务之间难免发生交互,比如:课程发布需要调用 CMS服务生成课程静态化页面,本节研究微服务远程调用所使用的技术. 下图是课程管理服务远程调用CMS服务的流程图: 1.cms服务将自己注册到注册中心. 2.课程管理服务从注册中心获取cms服务的地址. 3.课程管理服务远程调用cms服务. 2.1 Ribbon 2.1.1 Ribbon介绍 Ribbon是Netflix公司开源的一个负载均衡的项目(https://git…
我们先搭建单机环境 govern是治理的意思, 这样就把工程创建好了 创建包 创建SpringBoot的启动类. 在父工程里面已经确定了Spring Cloud的版本了.相当于锁定了版本 接下里只需要在子工程内引入eureka的包.那么这一些列相关的依赖jar包就自动的引进来.并且版本也 不用你管了.因为父工程已经锁定了Sring Cloud的版本. 引入后刷新一下包 spring cloud全部是基于Spring boot进行的开发,所以我们引入了Spring Cloud 后,springBo…
cms相当于客户端 配置客户端的信息 后面加逗号分隔开 50102表示向两台eureka服务上报服务,如果有一台死掉了 那么还可以上另外的一台去注册服务 直接把ip注册到eureka 启动类加注解 重启cms的服务.eureka的注册列表内 就可以看到cms的微服务了 eureka2也有了 课程管理也注册到微服务 先加入依赖.然后刷新包 启动类加注解 配置文件内 client端的配置 启动课程管理的微服务 日志级别改成info 因为启动控制台 输出了太多的信息 结束…
1 Eureka注册中心 1.1 需求分析 在前后端分离架构中,服务层被拆分成了很多的微服务,微服务的信息如何管理?Spring Cloud中提供服务注册中 心来管理微服务信息. 为什么 要用注册中心? 1.微服务数量众多,要进行远程调用就需要知道服务端的ip地址和端口,注册中心帮助我们管理这些服务的ip和 端口. 2.微服务会实时上报自己的状态,注册中心统一管理这些微服务的状态,将存在问题的服务踢出服务列表,客户 端获取到可用的服务进行调用. A要想调用B的服务就必须知道服务的地址 ip和端口…
修改认证服务的UserDetailServiceImpl类,下边的代码中 permissionList列表中存放了用户的权限, 并且将权限标识按照中间使用逗号分隔的语法组成一个字符串,最终提供给Spring security. 授权是SpringSecuriy的本职工作, 虽然可以在UserJwt里面扩充属性 UserJwt的构造方法的第三个参数就是权限. 自谦我们写的代码 权限暂时用的静态的 最终把权限转换成了字符串,放在了 UserJwt的构造方法的第三个参数上. 所以SpringSecur…
4 Zuul网关 4.1 需求分析 网关的作用相当于一个过虑器.拦截器,它可以拦截多个系统的请求. 本章节要使用网关校验用户的身份是否合法. 4.2 Zuul介绍 什么是Zuul? Spring Cloud Zuul是整合Netflix公司的Zuul开源项目实现的微服务网关,它实现了请求路由.负载均衡.校验过 虑等 功能. 官方:https://github.com/Netflix/zuul 什么是网关? 服务网关是在微服务前边设置一道屏障,请求先到服务网关,网关会对请求进行过虑.校验.路由等处…
远程 调用Spring Security来申请令牌,然后把申请到令牌存储到redis里面 cookieMaxAge: ‐1   -1表示浏览器一关闭cookie就失效. 测试远程申请令牌 TestClient 注入RestTemplate,来实现远程调用 令牌请求的地址是40400局势当前auth项目的端口. 认证服务最终会把自己注册到eureka 所以远程调用,建议从eureka中来拿地址.注入LoadBalancerClient,这是客户端负载均衡器,用来请求eureka拿到请求列表,从中选…
3 Spring Security Oauth2研究 3.1 目标 本项目认证服务基于Spring Security Oauth2进行构建,并在其基础上作了一些扩展,采用JWT令牌机制,并自定 义了用户身份信息的内容. 本教程的主要目标是学习在项目中集成Spring Security Oauth2的方法和流程,通过 spring Security Oauth2的研究需要达到以下目标: 1.理解Oauth2的授权码认证流程及密码认证的流程. 2.理解spring Security Oauth2的工…
api接口定义方法 api的微服务里面.CmsPageControllerApi内定义add方法,返回类型是CmsPageResult CmsPageResult继承了ResponseResult ResponseResult里面这三项,SUCCESS.SUCCESS_CODE.message 把新增的数据响应给客户端,客户端可能会用 加上swagger的注解 dao dao里面就不用写了我们直接用springDataMongoDB自带的save方法就可以了.在继承的MongoReposityo…
cms和课程的微服务重启 从数据库内找一条数据 进入到了断点 拼装课程信息 ,然后进行远程调用 抛出异常 可能是开了两个cms服务的事,负载均衡 到了另外一个服务里面 ,关掉一个 把02关掉,重启cms01 eureka服务也重启下,因为刚才关掉了一个cms的服务 如果要远程调用,需要增加无参构造方法.所以必须在这里个里面增加一个无参的构造方法 再次重启 课程的服务 远程调用后页面返回了null 在cms服务里面加断点测试 更新的时候id为null了. cmsPage这个对象为空了 这里变量写错…
1.3.2.2 高可用环境搭建 Eureka Server 高可用环境需要部署两个Eureka server,它们互相向对方注册.如果在本机启动两个Eureka需要 注意两个Eureka Server的端口要设置不一样,这里我们部署一个Eureka Server工程,将端口可配置,制作两个 Eureka Server启动脚本,启动不同的端口,如下图: 1.在实际使用时Eureka Server至少部署两台服务器,实现高可用. 2.两台Eureka Server互相注册. 3.微服务需要连接两台E…
4.2 Feign 拦截器 4.2.1 定义Feign拦截器 微服务之间使用feign进行远程调用,采用feign拦截器实现远程调用携带JWT. 在common工程添加依赖: <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring‐cloud‐starter‐openfeign</artifactId> </dependency> 拦截器…
4.1 需求分析 前边章节已经实现了用户携带身份令牌和JWT令牌访问微服务,微服务获取jwt并完成授权. 当微服务访问微服务,此时如果没有携带JWT则微服务会在授权时报错. 测试课程预览: 1.将课程管理服务和CMS全部添加授权配置 2.用户登录教学管理前端,进入课程发布界面,点击课程发布,观察课程管理服务端报错如下: 给cms的服务也接入认证 刷新包 复制授权的资源配置类 复制到cms的工程 复制公钥 cms的微服务重启下-测试 修改发布就要调用cms的服务了 点击修改发布 提示系统繁忙 控制…
携带JWT授权 登陆后jwt已经存到了sessionStorage里面 当进行微服务的请求就要携带令牌.我们在拦截器里面做文章. 在axios的intercepters拦截器上 手工的给这个课程 造一个图片的数据 刷新页面图片就有了.图片不显示的原因是因为图片的服务没有起来. 跟踪请求,在请求的时候把jwt带上了 点击课程计划 就没有权限 没有权限 给用户一个提示 请求后的拦截器 结束…
4 前端集成认证授权 4.1 需求分析 截至目前认证授权服务端的功能已基本完成,本章实现前端集成认证授权功能. 前端集成认证授权功能需要作如下工作: 1.前端页面校验用户的身份,如果用户没有登录则跳转到登录页面 2.前端请求资源服务需要在http header中添加jwt令牌,资源服务根据jwt令牌完成授权. 哪些功能需要前端请求时携带JWT? 用户登录成功请求资源服务都需要携带jwt令牌,因为资源服务已经实现了jwt认证,如果校验头部没有jwt则会认为 身份不合法. 前端携带jwt访问网关,网…
2.3 方法授权实现 2.3.1资源服务添加授权控制 1.要想在资源服务使用方法授权,首先在资源服务配置授权控制 1)添加spring-cloud-starter-oauth2依赖. 2)拷贝授权配置类ResourceServerConfig. 3)拷贝公钥. 课程管理这个服务已经被授权控制了 如果微服务想要被控制,因为科课程管理是后端管理的服务,所以它必须要校验令牌,校验用户身份 如果写了一个公开查询信息查询的服务,任何用户不用登陆就可以查询,它就不需要加入授权控制 第二步就是在方法上加注解…
1 用户授权业务流程 用户授权的业务流程如下: 业务流程说明如下: 1.用户认证通过,认证服务向浏览器cookie写入token( 身份令牌) 2.前端携带token请求用户中心服务获取jwt令牌 前端获取到jwt令牌解析,并存储在sessionStorage 3.前端携带cookie中的身份令牌及jwt令牌访问资源服务 前端请求资源服务需要携带两个token,一个是cookie中的身份令牌,一个是http header中的jwt 前端请求资源服务前在http header上添加jwt请求资源…
4.5 过虑器 Zuul的核心就是过虑器,通过过虑器实现请求过虑,身份校验等. 4.5.1 ZuulFilter 自定义过虑器需要继承 ZuulFilter,ZuulFilter是一个抽象类,需要覆盖它的四个方法,如下: 1. shouldFilter:返回一个Boolean值,判断该过滤器是否需要执行.返回true表示要执行此过虑器,否则不执行. 2. run:过滤器的业务逻辑. 3. filterType:返回字符串代表过滤器的类型, 如下 pre:请求在被路由之前执行 routing:在路…