业务题day02

2-1 说一下生成课表的业务流程

当点击马上学习或者报名的时候,先去数据库查询课程是否存在或者是否在有效期内,如果判断通过,就成功。

接下来就要保存对应的课表,在上述操作中涉及两个微服务,下单过程trade微服务调用了learning微服务,跨微服务调用,有两种方式,1.同步的feign,2.异步的mq。选取的原则是看是否需要返回值。

这里交易完成后,是trade交易微服务调用learning微服务。trade微服务不需要返回结果,只有查询才需要返回结果,所以这里使用异步的mq比较合适。

也就是说只要下单成功就投递一条消息到mq中,learning微服务监听mq,拿到投递到mq中的消息,把课程保存到课表中。即有两部分代码,一部分是在交易微服务中投递消息,一部分是在学习微服务中消费消息。

请求消息已经发过来了,我们要做的是接收,作为MQ的消费者,不是要写一个Controller,而是要写一个listener监听器,监听器需要写在学习微服务中(learning),因为是要在learning微服务中监听MQ保存课程到课表。

生成课表就是监听MQ的消息队列,接收到投递过来的消息后,对数据库进行一个新增操作,在这业务里,涉及到RabbitMQ,课表微服务及课程微服务。

首先,在课表微服务中实现监听RabbitMQ队列的功能,指定交换机名称和监听的队列。

然后,在我们接收到消息后,调用课表的业务层进行新增课表。

在新增课表时,需要调用课程微服务,根据课程ID获取课程的详细信息,并将我们需要的信息封装到实体类中,最后写入到数据库中。

2-2 说一下查询课表的业务流程

查询课表的业务使用到了课表微服务和课程微服务,根据课程ID查询出课程细腻,封装后进行返回。

首先,在课程微服务中根据当前用户ID进行分页查询,获取我们需要返回的结果。

然后,通过stream流把查询到的所有课程ID收集起来,通过调用课程微服务,获取课程信息的集合。

接下来,将获取到的信息集合转为map对象,并对分页查询的结果进行遍历,从map对象中获取课程信息封装到VO对象中,并对列表中的数据进行替换。

最后返回封装好的list集合。

2-3 说一下查询最近学习章节的业务流程

在我们的项目中,查询最近学习的章节使用了两个微服务、三张表,分别是 课程微服务 的 课程表 和 章节目录表 以及 课表微服务 的 课表。

首先,当浏览器查询的请求发过来后,从课程表中查询,设置业务条件(登录用户id,并且以最后一次学习时间倒序排列),执行查询。

虽然最近学习章节只会查询一个结果,但是由于返回结果VO中需要该用户课表的数量,为了提高性能,少从数据库查一次数量,所以这里查询该用户的所有课程,取第一个。

然后调用 课程表 对应的feign接口和 章节目录表 对应的feign接口,补充数据。

最后返回结果。

这就是我在项目中查询最近学习章节的业务流程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/623060.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Zookeeper使用详解

介绍 ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布…

C语言之冒泡排序(数组)

//数组--冒泡排序 //1.经典错误版 #include<stdio.h> void bubble_sort(int arr[]) { //确定冒泡函数的趟数(10个元素&#xff0c;9趟冒泡排序) int i 0; int sz sizeof(arr) / sizeof(arr[0]);//10 算出了1 这里错了 传参错了 for (i 0; i < sz…

1127: 矩阵乘积

题目描述 计算两个矩阵A和B的乘积。 输入 第一行三个正整数m、p和n&#xff0c;0<m,n,p<10&#xff0c;表示矩阵A是m行p列&#xff0c;矩阵B是p行n列&#xff1b; 接下来的m行是矩阵A的内容&#xff0c;每行p个整数&#xff0c;用空格隔开&#xff1b; 最后的p行是矩…

【零基础入门TypeScript】字符串

目录 句法 字符串方法 String 对象允许您处理一系列字符。它使用许多辅助方法包装字符串原始数据类型。 句法 var var_name new String(string); 下面给出了 String 对象中可用方法的列表及其描述&#xff1a; 编号属性及描述1.构造函数 返回对创建该对象的 String 函数的…

MFC多线程编程示例1

新建一个对话框工程; 添加2个编辑框,2个按钮; 对话框头文件添加, public:CWinThread *m_pthread1;CWinThread *m_pthread2;static UINT hellothread(LPVOID lparam);static UINT testthread(LPVOID lparam);CCriticalSection g_criticalsection;BOOL flag;int i1, i2; …

BC28 大小写转换

描述 实现字母的大小写转换。多组输入输出。 输入描述&#xff1a; 多组输入&#xff0c;每一行输入大写字母。 输出描述&#xff1a; 针对每组输入输出对应的小写字母。 示例1 输入&#xff1a; A B复制输出&#xff1a; a b 复制 备注&#xff1a; 多组输入过程中…

第九部分 使用函数 (四)

目录 一、foreach 函数 二、if 函数 三、call 函数 一、foreach 函数 foreach 函数和别的函数非常的不一样。因为这个函数是用来做循环用的&#xff0c;Makefile 中的 foreach 函数几乎是仿照于 Unix 标准 Shell&#xff08;/bin/sh&#xff09;中的 for 语句&#xff0c;或…

SpringFramework实战指南(一)

SpringFramework实战指南&#xff08;一&#xff09; 一、技术体系结构1.1 总体技术体系1.2 框架概念和理解 一、技术体系结构 1.1 总体技术体系 单一架构 一个项目&#xff0c;一个工程&#xff0c;导出为一个war包&#xff0c;在一个Tomcat上运行。也叫all in one。 单一架…

AUTOSAR从入门到精通-Autosar 中断机制(七)

目录 原理 任务与中断 任务 栈管理 激活任务 中断 copy数据及中断处理

springboot(ssm摄影分享网站系统 摄影论坛系统Java系统

springboot(ssm摄影分享网站系统 摄影论坛系统Java系统 开发语言&#xff1a;Java 框架&#xff1a;ssm/springboot vue JDK版本&#xff1a;JDK1.8&#xff08;或11&#xff09; 服务器&#xff1a;tomcat 数据库&#xff1a;mysql 5.7&#xff08;或8.0&#xff09; 数…

Kubernetes (十二) 存储——Volumes配置管理

一. 卷的概念 官方地址&#xff1a;卷 | Kuberneteshttps://v1-24.docs.kubernetes.io/zh-cn/docs/concepts/storage/volumes/ 二. 卷的类型及使用 …

前端性能优化之数据存取,存储以及缓存技术

无论是哪种计算机语言&#xff0c;说到底它们都是对数据的存取与处理。若能在处理数据前&#xff0c;更快地读取数据&#xff0c;那么必然会对程序执行性能产生积极的作用。 一般而言&#xff0c;js的数据存取有4种方式。 直接字面量:字面量不存储在特定位置也不需要索引&…

spring基于XML方式的组件管理

基本介绍 依赖注入是一种处理对象间依赖关系的技术。在Spring中&#xff0c;依赖注入有构造方法注入和设值注入两种方式。 设值注入是将依赖作为成员变量&#xff0c;通过主调类的setter方法注入依赖。构造方法注入则是在Bean的构造方法中注入依赖。 本次我们将通过具体例子来…

django分库分表的优化

Django分表方案 方案一&#xff1a;轮询方式分表 当系统数据越来越多的时候&#xff0c;查询变得缓慢&#xff0c;即使加了索引&#xff0c;由于表数据的增加&#xff0c;索引的维护也会成为数据库性能的限制问题&#xff0c;所以此时可以通过分表&#xff0c;将数据通过某种…

Java 虚拟机

运行时数据区域 方法区&#xff1a;方法区是线程共享的&#xff0c;用于存储已被虚拟机加载的类信息&#xff0c;常量&#xff0c;静态变量&#xff0c;即时编译器编译后的代码等数据。 虚拟机栈&#xff1a;虚拟机栈是线程私有的&#xff0c;其生命周期与线程相同即每个线…

CSC8021_computer network_The Transport Layer

Role of the transport layer • The transport layer is responsible for providing a reliable end-to-end connection between two application processes in a network • Abstracting away the physical subnet • Does not involve intermediate nodes • Takes a netwo…

UML-通信图和交互概览图(通信图和顺序图的区别与联系)

UML-通信图和交互概览图&#xff08;通信图和顺序图的区别与联系&#xff09; 一、通信图简介1.消息2.链接 二、通信图和[顺序图](https://blog.csdn.net/weixin_65032328/article/details/135587782)的联系与区别三、交互概览图四、顺序图转化为通信图练习 一、通信图简介 通…

2.2 物理层

2.2 物理层 2.2.1 物理层的基本概念 1、物理层主要解决在各种传输媒体上传输比特0和1的问题&#xff0c;进而给数据链路层提供透明传输比特流的服务 2、由于传输媒体的种类太多&#xff08;例如同轴电缆、光纤、无线电波等&#xff09;&#xff0c;物理连接方式也有很多例如…

vs c++ qt 打包成exe

1 vs2019QT 打包项目 可执行文件exe_哔哩哔哩_bilibili 2 在开始中 找到 qt5142\5.14.2\msvc2017_64 类似于cmd命令行 3 windeployqt.exe 形态环境变量 qt安装包搜索windeployqt.exe D:\qt\5.15.2\winrt_x64_msvc2019\bin 4 \x64\Release\ vs调到Release x64 重新生成 5 运…

libcurl开源库的编译与使用全攻略

libcurl简介 libcurl 是一个广泛使用的、支持多种协议的、开源的客户端URL传输库&#xff0c;提供了许多用于数据传输的API&#xff0c;例如文件传输、FTP、HTTP、HTTPS、SMTP等。libcurl 的主要特点包括 支持多种协议&#xff1a;libcurl 支持多种协议&#xff0c;如 HTTP、F…