Is this you? As a journalist, you can create a free Muck Rack account to customize your profile, list your contact preferences, and upload a portfolio of your best work.
Claim your profile
Articles by Long userId
중앙해커톤 리팩터링-3
이번 글에서는 사용자의 관심 카테고리 목록 리스트 토글 및 목록 조회하기, 그리고 QueryDSL을 사용한 조건별 이벤트 목록 조회, 이번주 팝업 스테이션 조회를 살펴볼 예정이다. 마지막으로 카테고리 피드 및 상세 조회 관련 API까지 총 6가지 API를 살펴볼 것이다. 3편이 핵심이 될 것 같다.
인기글 기능 설계 및 구현
실시간 인기글 기능 구현 배경 메인페이지는 서비스에서 가장 많이 호출되는 페이지다. 사용자가 서비스에 접속하면 가장 먼저 마주하는 화면이기 때문에 빠른 응답 속도가 필수적이다. 이러한 메인페이지에 자유게시판과 코드게시판의 인기글을 노출하기로 결정하면서, 어떤 방식으로 인기글을 선정하고 제공할 것인지에 대한 고민이 시작되었다. 가장 단순한 방법은 메인페이지 조회 시마다 게시글들을 조회수, 좋아요, 댓글 수 등으로 정렬하고 집계하여 상위 게시글을 가져오는 것이다. 하지만 이 방식은 매 요청마다 복잡한 계산 쿼리를 실행해야 하므로 데이터베이스에 상당한 부담을 준다. 특히 게시글이 수천, 수만 개로 늘어날수록 정렬과 집계 연산의 비용은 기하급수적으로 증가한다. 메인페이지의 높은 호출 빈도를 고려하면 이는 전체 서비스 성능에 치명적인 영향을 미칠 수 있다. 인기글의 본질에 대해서도 생각해보았다. 인기글이란 특정 기간 동안 사용자들의 반응이 누적된 글이라고 판단했다.
长流程、复杂业务流程分布式事务管理实战-CSDN博客
原创 已于 2025-09-03 17:02:33 修改 · 280 阅读 · 3 · 2 · CC 4.0 BY-SA版权 版权声明:本文为博主原创文章,遵循 CC 4.0 BY 版权协议,转载请附上原文出处链接和本声明。 文章标签: #spring boot #rocketmq #saga #复杂流程分布式事务 #长流程 于 2025-09-03 10:42:50 首次发布 基于 Spring Boot + RocketMQ 实现一个完整的 Saga Orchestrator 模式案例,确保“创建订单 -> 添加积分 -> 创建物流单”这三个操作的最终一致性。 一、架构概览 我们将创建四个微服务: Order Service (订单服务):核心入口,创建订单并启动Saga流程。 Points Service (积分服务):负责为用户增加积分。 Shipping Service (物流服务):负责创建物流运单。 Saga Orchestrator (协调器服务):核心大脑,集中管理整个Saga流程的状态和顺序,触发正向操作和补偿操作。 交互流程如下图所示: 二、实现步骤...
newbee商城购物车模块mapper.xml-CSDN博客
最新推荐文章于 2025-04-17 19:04:06 发布 你们补药再卷啦 最新推荐文章于 2025-04-17 19:04:06 发布 阅读量836 收藏 14 点赞数 6 文章标签: java 数据库 sql 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 1.浏览代码 1)表 自定义 DROP TABLE IF EXISTS `tb_newbee_mall_shopping_cart_item`; CREATE TABLE `tb_newbee_mall_shopping_cart_item` ( `cart_item_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '购物项主键id', `user_id` bigint(20) NOT NULL COMMENT '用户主键id', `goods_id` bigint(20) NOT NULL DEFAULT 0 COMMENT '关联商品id', `goods_count` int(11) NOT NULL...
Data Modeling for Java Developers: Structuring With PostgreSQL and MongoDB
Application and system designs have always been considered the most essential step in application development. All the later steps and technologies to be used depend on how the system has been designed. If you are a Java developer, choosing the right approach can mean distinguishing between a rigid, complex schema and a nimble, scalable solution.
Optimizing Container Synchronization - DZone
Efficient data synchronization is crucial in high-performance computing and multi-threaded applications. This article explores an optimization technique for scenarios where frequent writes to a container occur in a multi-threaded environment. We’ll examine the challenges of traditional synchronization methods and present an advanced approach that significantly improves performance for write-heavy environments.
小熊家政帮day22-day23 订单系统优化(订单状态机、练习分库分表、索引、订单缓存)
1 状态机 1.1.1 当前存在的问题 在预约下单模块设计订单状态共有7种,如下图: 目前我们使用了待支付、派单中两种状态,在代码中我们发现存在对订单状态进行硬编码的情况,但是随着开发的深入这种代码会越来越多,比如在实现对订单进行关闭时代码会写成如下的形式: 1 update(id,已关闭) ) if(订单状态==服务中){ update(id,已关闭) ) ...
微服务第一轮-CSDN博客
课程文档 目录 VO: DTO: RestTemplate 一、业务流程 Controller中的接口: @Api(tags = "用户相关接口") @RestController @RequestMapping("/users") @RequiredArgsConstructor public class UserController { private final IUserService userService; @ApiOperation("用户登录接口") @PostMapping("login") public UserLoginVO login(@RequestBody @Validated LoginFormDTO loginFormDTO){ return userService.login(loginFormDTO); } } Service中的实现impl: public interface IUserService extends IService<User> { UserLoginVO login(LoginFormDTO loginFormDTO);...
五张图带你了解分布式事务 Saga 模式中的状态机
大家好,我是君哥。 状态机在我们的工作中应用非常广泛,今天聊一聊分布式事务中间件 Seata 中 Saga 模式的状态机。 状态机是一个数学模型,它将工作中的运行状态和流转规则抽象出来,可以协调相关信号来完成预先设定的操作。 下面介绍状态机中的几个概念: 状态:状态机目前的状态标识; 状态转移:定义状态之间的转移路由; 动作(Action):状态转移需要的操作; 事件:要执行某个操作时的触发器或者口令。 状态机一般用在状态类型比较多(超过 3 个),分支流程比较多,初始状态经过多个流程的流转达到最终状态的场景。 Saga 模式是分布式事务中长事务的一种解决方案,Seata 中 Saga 模式的理论基础是 Hector & Kenneth 在 1987 年发表的论文 Sagas。下图(来自官网)是 Seata 中 Saga 模型: 在 Saga 模式中,如果一部分分支事务已经提交成功,当其中一个分支事务提交失败,状态机就会触发所有提交成功的分支事务进行回滚。 分支事务中提交和回滚的逻辑需要由业务代码来实现。 Seata 中 Saga 模式是基于状态机来实现的,使用 Saga...
Cloud-Eureka服务治理-Ribbon负载均衡-CSDN博客
构建Cloud父工程 父工程只做依赖版本管理 不引入依赖 pom.xml <packaging>pom</packaging> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.9.RELEASE</version> <relativePath/> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> <spring-cloud.version>Hoxton.SR10</spring-cloud.version>...
SpringAOP+SpringBoot事务管理-CSDN博客
项目搭建 SpringAOP SpringBoot中管理事务 AOP案例实战-日志记录 日志系统 一、项目搭建 第一步:构建项目 第二步:导入依赖 第三步:配置信息 自动配置(项目自动生成的启动类) @MapperScan("cn.itsource.mapper") @SpringBootApplication public class AopApplication { public static void main(String[] args) { SpringApplication.run(AopApplication.class, args); } } 手动配置(项目中的.yml配置) server: port: 80 spring: datasource: username: root password: 123456 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/test mybatis: configuration: log-impl:...
Java21 + SpringBoot3集成WebSocket
近日心血来潮想做一个开源项目,目标是做一款可以适配多端、功能完备的模板工程,包含后台管理系统和前台系统,开发者基于此项目进行裁剪和扩展来完成自己的功能开发。 本项目为前后端分离开发,后端基于Java21和SpringBoot3开发,前端提供了vue、angular、react、uniapp、微信小程序等多种脚手架工程。 本文主要介绍项目中如何集成WebSocket实现服务器端与客户端的双向通信。 什么是WebSocket WebSocket 是一种网络通信协议。RFC6455 定义了它的通信标准。 http是一种无状态,无连接,单向的应用层协议,它采用了请求/响应模型,通信请求只能由客户端发起,服务端对请求做出应答处理。这样的弊端显然是很大的,只要服务端状态连续变化,客户端就必须实时响应,都是通过javascript与ajax进行轮询,这样显然是非常麻烦的,同时轮询的效率低,非常的浪费资源(http一直打开,一直重复的连接)。...
ruoyi的springboot企业微信登录方式实现(企业内部应用开发)_springboot 集成企业微信登录-CSDN博客
前言 主要是讲ruoyi前后端分离框架,springboot的微信小程序的实现方式,之前我发过一篇微信小程序的登录方式,企业微信的登录实现方式也是类似的(企业内部应用开发) 一、企业微信的登录接口 根据企业微信开放文档企业,企业微信通过扫码后可以获得用户的code,可用于当前企业下现有的企业微信用户,并且授予基本信息 获取用户登录身份 请求方式:GET(HTTPS) 请求地址:https://qyapi.weixin.qq.com/cgi-bin/auth/getuserinfo?access_token=ACCESS_TOKEN&code=CODE 参数说明: 属性类型必填说明 access_token string 是 调用接口凭证 code string 是 通过成员授权获取到的code,最大为512字节。每次成员授权带上的code将不一样,code只能使用一次,5分钟未被使用自动过期。前端给予的入参 打开企业微信,点击自己头像(需要管理员权限),点击管理企业 点击【我的企业】,最下面有一个企业ID,就是corpId...
关于SpringCloud的中的Eureka使用方法-CSDN博客
首先创建一个空项目: 创建父工程shop_parent 在IDEA中创建父工程 shop_parent 并引入坐标 : <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.9.RELEASE</version> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </dependency> <dependency>...
基于Springboot+Mybatis+微信小程序实现小型运动管理平台-CSDN博客
此文主要功能包括:运动健康平台登录注册、了解健康知识、查看管理运动的文章与详情、每日登录打卡、系统通知、留言管理、提交运动功能。使用Java作为后端语言进行支持,界面友好,开发简单。 2.1、下载安装IntelliJ IDEA(后端语言开发工具),Mysql数据库,微信Web开发者工具。 1.创建maven project 先创建一个名为SpringBootDemo的项目,选择【New Project】 然后在弹出的下图窗口中,选择左侧菜单的【New Project】(注:和2022之前的idea版本不同,这里左侧没有【Maven】选项,不要选【Maven Archetype】!!!),输入Name(项目名):SpringBootDemo,language选择【java】,build system选择【maven】,然后选择jdk,我这里选的是jdk18.
关于点赞业务对MySQL和Redis和MongoDB的思考 - Rookie_Leixin - 博客园
点赞 在我个人理解中,点赞业务比较频繁,很多人业务可能都会有这个,比如:博客,视频,文章,动态,评论等,但是不应该是核心业务,不应该大量地请求MySQL数据库,给数据库造成大量的资源消耗,MySQL的数据库是非常宝贵的. 以某音为例,当我去搜索的时候,全抖音比较高的点赞数目应该是在1200w - 2000w,我们自己的业务肯定答不到这么高的,但是假设有10个100w的点赞的博客,user_id为用户ID,publication_id为博客的id 第一种方式是直接操作数据库.每次有点赞或者取消点赞操作时,就更新MySQL数据库的点赞数.同时,插入或者更新一个user_id和publication_id的数据行,如果点赞操作非常频繁,会对数据库产生很大的压力.如果有大量的点赞记录,会对数据库产生很大的数据量,一篇文章,100w+的点赞的记录,对于MySQL来说,是非常恐怖的. 第二种方式是通过MySQL + Redis的Set来实现,具体代码如下,以下的代码为B站Redis黑马点评项目: @Override public Result likeBlog(Long id){ // 1.
枚举工具类-阿里云开发者社区
暮冬时烤雪,迟夏写长信。——陈鸿宇 现已并入hutool5.8.0,PR链接地址:https://gitee.com/dromara/hutool/pulls/583 This is a story about pull request 我们在使用枚举的过程中,经常会遇到字段相互之间映射的场景: 例如此处我编写一个GenderEnum 1 2 3 4 5 6 7 8 9 10 11 12 13 @Getter @AllArgsConstructor public enum GenderEnum { /** * 性别枚举 */ FEMALE("男"), MALE("女"), UNKNOWN("未知"); private final String desc; } 然后对其进行使用,我们前端传入可能是0/1/2这样的数字,我们就可以通过EnumUtil#getFieldBy,来通过ordinal,也就是我们枚举的序号,获取对应的汉字返回 1 2 3 // 获取desc 通过ordinal 值为0 String desc =...
基于海康SDK实现Python调用海康威视网络摄像头_python 调用海康威视网络摄像机sdk显示opemcv-CSDN博客
本文参考博客,写得很好: Python调用海康威视网络相机之——python调用海康威视C++的SDK Python调用海康威视网络相机C++的SDK 写本文的目的,也是快速复盘,所以没有很详细 保存视频流到本地可参考下一篇:基于海康SDK实现Python保存海康威视网络摄像头拍摄的视频 1.
大厂防止超卖的 7 种实现,很受用!
作者:止步前行 https://blog.csdn.net/zxd1435513775/article/details/122643285 高并发场景在现场的日常工作中很常见,特别是在互联网公司中,这篇文章就来通过秒杀商品来模拟高并发的场景。 本文环境: SpringBoot 2.5.7 + MySQL 8.0 X + MybatisPlus + Swagger2.9.2 模拟工具: Jmeter 模拟场景: 减库存->创建订单->模拟支付 2.商品秒杀-超卖 在开发中,对于下面的代码,可能很熟悉:在Service里面加上@Transactional事务注解和Lock锁。 控制层:Controller @ApiOperation(value= "秒杀实现方式——Lock加锁" ) @PostMapping( "/start/lock" ) public Result startLock(long skgId){ try { log.info( "开始秒杀方式一..." ); final long userId = (int) (new Random().nextDouble()...
基于若依ruoyi-nbcio增加flowable流程待办消息的提醒,并提供右上角的红字数字提醒(五)_宁波阿成的博客-CSDN博客
1、下面提供给前端待办提醒消息的接口SysNoticeController,增加如下: /** * 补充用户数据,并返回系统消息 * @return */ @Log(title = "系统消息") @GetMapping("/listByUser") public R<Map<String, Object>> listByUser(@RequestParam(required = false, defaultValue = "5") Integer pageSize) { LoginUser loginUser = commonService.getLoginUser(); Long userId = loginUser.getUserId(); // 1.将系统消息补充到用户通告阅读标记表中 LambdaQueryWrapper<SysNotice> querySaWrapper = new LambdaQueryWrapper<SysNotice>();...
使用 MyBatisPlus 的注解方式进行 SQL 查询,它结合了条件构造器(Wrapper)和自定义 SQL 片段来构建查询语句。
MyBatis-Plus 是一个基于 MyBatis 的增强工具,它提供了一套方便的注解方式来进行 SQL 查询。其中,它结合了条件构造器(Wrapper)和自定义 SQL 片段来构建查询语句。 官网:条件构造器 | MyBatis-Plus 1、使用 Wrapper 自定义SQL注意事项 需要mybatis-plus版本 >= 3.0.7 2、直接通过一个简单的示例进行讲解: 假设我们有一个名为"Order"的表,包含"orderId"和"amount"两列: import lombok.Data; import java.math.BigDecimal; import java.time.LocalDateTime; @Data public class Order { private Long orderId; private Long userId; private BigDecimal amount; private LocalDateTime createTime; } 现在,我们要查询某个用户在指定时间范围内的订单金额总和。可以按照以下方式编写代码: import...
RabbitMQ实现数据库与ElasticSearch的数据同步和分享文件过期处理_Cau1i的博客-CSDN博客
RabbitMQ实现数据库与ElasticSearch的数据同步 | Hannya。-CSDN 企业级开发项目实战——基于RabbitMQ实现数据库、elasticsearch的数据同步 | 波总说先赚它一个小目标-CSDN SPringBoot集成RabbitMQ实现30秒过期删除功能 | 军大君-CSDN 当进行文件上传、文件创建、文件重命名等操作时: 通过RabbitMQ: 生产者:文件服务,执行上传、创建、重命名等文件操作,将用户文件信息(例如文件名、文件ID等)发送到RabbitMQ新增队列。 消费者:查询服务,监听RabbitMQ新增队列,一旦收到消息,将用户文件信息新增或更新到Elasticsearch中。 文件删除时: 通过RabbitMQ: 生产者:文件服务,执行文件删除操作,将用户文件ID发送到RabbitMQ删除队列。 消费者:查询服务,监听 RabbitMQ 队列,一旦收到消息,通过用户文件ID从Elasticsearch中删除相应的用户文件信息。 根据文件名进行文件模糊查询: 通过OpenFeign:...
DDD 对决:事务脚本 vs. 领域模型,哪个才是业务优化的终极方案?
在 CQRS 架构篇提到,由于 Command 和 Query 内部驱动力完全不同,需要在架构层就进行分离,但其中有个一个原则极为重要: “读”再复杂也是简单; “写”再简单也是复杂; 可见 Command 远比 Query 棘手的多,其中最关键的便是使用哪种模式来承载业务? 最常见的业务承载模式有: 事务脚本。 领域模型。 事务脚本 和 领域模型 都是承载业务的不同模型,都有其适合的场景,没有绝对的对和错。核心的决策依据只有一个:选择最合适的业务场景即可。 简单且直观的对两者进行区分: 事务脚本,门槛低上手快,适合简单的业务场景,比如资讯、博客等; 领域模型,门槛很高,适合处理复杂的业务场景,比如电商、银行、电信等; 大家最常听说也是最反感的便是:被别人称为 CRUD boy,更多时候说的便是 事务脚本。 1.1. 事务脚本 事务脚本(Transaction Script)是一种应用程序架构模式,主要用于处理简单的业务场景。它将业务逻辑和数据库访问紧密耦合在一起,以便实现对数据的操作。 事务脚本,将整个业务逻辑封装在一个事务中,借助数据库事务来满足业务操作的 ACID...
【Fegin技术专题】「原生态」打开Fegin之RPC技术的开端,你会使用原生态的Fegin吗?(上)_夏壹-10分分享的博客-CSDN博客
前提介绍 Feign是SpringCloud中服务消费端的调用框架,通常与ribbon,hystrix等组合使用。 由于遗留原因,某些项目中,整个系统并不是SpringCloud项目,甚至不是Spring项目,而使用者关注的重点仅仅是简化http调用代码的编写。 *如果采用httpclient或者okhttp这样相对较重的框架,对初学者来说编码量与学习曲线都会是一个挑战,而使用spring中RestTemplate,又没有配置化的解决方案,由此想到是否可以脱离Spring cloud,独立使用Feign。 内容简介 Feign使得 Java HTTP 客户端编写更方便。Feign 灵感来源于Retrofit、JAXRS-2.0和WebSocket。Feign最初是为了降低统一绑定Denominator到HTTP API的复杂度,不区分是否支持Restful。Feign旨在通过最少的资源和代码来实现和HTTP API的连接。通过可定制的解码器和错误处理,可以编写任意的HTTP API。 maven依赖 <dependency>...
MongoDB 使用总结_Dream_sky分享的博客-CSDN博客
🍓 简介:java系列技术分享(👉持续更新中…🔥) 🍓 初衷:一起学习、一起进步、坚持不懈 🍓 如果文章内容有误与您的想法不一致,欢迎大家在评论区指正🙏 🍓 希望这篇文章对你有所帮助,欢迎点赞 👍 收藏 ⭐留言 📝 🍓 更多文章请点击 MongoDB官网 : https://www.mongodb.com MongoDB是一个基于分布式文件存储的数据库。由C++语言编写,旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongodDB是一个开源,高性能,支持海量数据存储的文档型数据库,是NoSQL数据库产品的一种 MongodDB是一个高效的非关系性数据库(不支持表关系,只能操作单表) 2.1 数据特点 支持数据的海量存储 数据的读写响应速度较高 数据安全性不高,可以接受一定范围内的误差 不支持事务 动态字段 MongodDB 使用Bson存储数据(Binary JSON),一种类似Json的数据格式 2.2 数据存储 2.3 扩展性 支持数据分片 2.4 MongoDB与Mysql对比 不常用 3.1 数据库以及表的操作 > show dbs > use test >...
java实现微信小程序订阅和推送订阅信息_java 微信订阅_Stefanboy的博客-CSDN博客
1、进入微信公众平台,扫码登录 https://mp.weixin.qq.com/ 2、获取appid和secret 小程序后台->开发->开发管理->开发设置->开发者 ID(需要配置在yml文件中) 3、配置模板 小程序后台->功能->订阅消息->我的模板->搜索需要模板(企业主体可以添加模板)->点击模板后面选用->选择关键词并填写场景->提交->点击详情->可以看到模板的详细信息->模板id需要配置在yml中。 需要注意的是thing最多接收20个字符,如果字符过多可配置character_string类型,该类型最多32个字符 后端代码配置 在对应yml中配置 spring-boot-plus: wechat: secret: 微信小程序中的secret appid: 微信小程序中的appid host: https://api.weixin.qq.com 固定配置 templateId1: 需要使用的模板id 该配置的key的值自定义,可配置多个 templateId2: xxx path1:...
【SpringCloud】Eureka 案例上手稍微带点原理
先准备两个能独立跑起来的微服务(user-server 和 order-server) 将 所需 SQL 导入 SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; DROP TABLE IF EXISTS `tb_order`; CREATE TABLE `tb_order` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '订单id', `user_id` bigint(20) NOT NULL COMMENT '用户id', `name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '商品名称', `price` bigint(20) NOT NULL COMMENT '商品价格', `num` int(10) DEFAULT 0 COMMENT '商品数量', PRIMARY KEY (`id`) USING BTREE, UNIQUE INDEX...
9.4. 分布式与微服务架构 - 博客0214 - 博客园
在本章节中,我们将介绍分布式系统和微服务架构的基本概念。分布式系统解决了单体应用面临的可扩展性、高可用性等问题,而微服务架构进一步提升了系统的可维护性和灵活性。 9.4.1. 分布式系统基本概念 分布式系统是由多个独立的计算节点组成的系统,这些节点通过网络进行通信和协作。 分布式系统的主要特点是可扩展性、高可用性和容错性。 可扩展性(Scalability):分布式系统可以通过添加更多的计算节点来提升处理能力,以应对不断增长的业务需求。 高可用性(High availability):分布式系统可以在某个节点发生故障时,自动将任务转移到其他正常节点上,从而保证系统的正常运行。 容错性(Fault tolerance):分布式系统可以在部分节点发生故障时,依然能够正常提供服务。 9.4.2. 微服务架构基本概念 微服务架构是一种软件架构风格,它将一个大型应用划分为多个独立的、可独立部署的小型服务。这些小型服务可以使用不同的编程语言和技术栈进行开发,它们通过轻量级的通信协议(如HTTP/REST)进行互相调用。 微服务架构的主要优势在于:...
设计模式之订阅发布模式_ITPUB博客
首页 > 应用开发 > Java > 设计模式之订阅发布模式 订阅发布模式(Publish-Subscribe Pattern)是一种行之有效的解耦框架与业务逻辑的方式,也是一种常见的观察者设计模式,它被广泛应用于事件驱动架构中。 在这个模式中,发布者(或者说是主题)并不直接发送消息给订阅者,而是通过调度中心(或者叫消息代理)来传递消息。 发布者(或者说是主题)并不知道订阅者的存在,而订阅者也不知道发布者的存在。他们彼此的关系就是在调度中心注册成为订阅者或者发布者。 当一个发布者有新消息时,就将这个消息发布到调度中心。调度中心就会将这个消息通知给所有订阅者。这就实现了发布者和订阅者之间的解耦,发布者和订阅者不再直接依赖于彼此,他们可以独立地扩展自己。 在具体的实现中,可以通过消息队列、事件总线等机制来实现调度中心,不同语言和平台都有实现的库和框架,例如 Java 中的 ActiveMQ、RabbitMQ、Kafka等。 订阅发布模式有以下优点: 性能好,发布者发送消息后直接返回不需要等待消费者处理完毕。 解耦性较强,发布者和订阅者之间不存在直接依赖,满足高内聚低耦合的设计思想。...
设计模式之订阅发布模式 - waynaqua - 博客园
订阅发布模式(Publish-Subscribe Pattern)是一种行之有效的解耦框架与业务逻辑的方式,也是一种常见的观察者设计模式,它被广泛应用于事件驱动架构中。 在这个模式中,发布者(或者说是主题)并不直接发送消息给订阅者,而是通过调度中心(或者叫消息代理)来传递消息。 发布者(或者说是主题)并不知道订阅者的存在,而订阅者也不知道发布者的存在。他们彼此唯一的关系就是在调度中心注册成为订阅者或者发布者。 当一个发布者有新消息时,就将这个消息发布到调度中心。调度中心就会将这个消息通知给所有订阅者。这就实现了发布者和订阅者之间的解耦,发布者和订阅者不再直接依赖于彼此,他们可以独立地扩展自己。 在具体的实现中,可以通过消息队列、事件总线等机制来实现调度中心,不同语言和平台都有实现的库和框架,例如 Java 中的 ActiveMQ、RabbitMQ、Kafka等。 订阅发布模式有以下优点: 性能好,发布者发送消息后直接返回不需要等待消费者处理完毕。 解耦性较强,发布者和订阅者之间不存在直接依赖,满足高内聚低耦合的设计思想。...
基于若依前后端分离框架的小程序的token验证_ruoyi token验证_Hask的博客-CSDN博客
后端和管理端都用的若依框架。 但是前段的小程序需要微信授权登录。这时候就需要在若依框架上重新再起一套token验证。 首先创建两个类(只要放在你能够引用得到的位置就可以): 第一个:实体 package com.ruoyi.system.toeknUnits; public class WxLoginUser { private static final long serialVersionUID = 1L; private Long userId; private Long deptId; private String token; private Long loginTime; private Long expireTime; private String ipaddr; private String loginLocation; private String browser; private String os; private String openId; private String nickName; } 第二个service: package...
交友项目【根据id查询单条动态&发布评论&查询评论列表】_51CTO博客_根据id查询数据
爱吃豆的土豆 2023-04-29 13:54:24 ©著作权 文章标签 交友 List 代码实现 接口分析 文章分类 jQuery 前端开发 ©著作权归作者所有:来自51CTO博客作者爱吃豆的土豆的原创作品,请联系作者获取转载授权,否则将追究法律责任 目录 1:根据id查询单条动态 1.1:接口分析 1.2:流程分析 1.3:代码实现 2:发布评论 2.1:接口分析 2.2:流程分析 2.3:代码实现 3:查询评论列表 3.1:接口分析 3.2:流程分析 3.3:代码实现 1:根据id查询单条动态 1.1:接口分析 API 接口文档: http://192.168.136.160:3000/project/19/interface/api/151 注意: 单条动态 和 查询评论列表 ,同时完成,app端才可以显示内容 1.2:流程分析 根据id查询对应动态详情信息,接收到前端传来的id信息,到数据库中查询指定的数据,将数据处理封装返回前端,这个功能需要和该动态的所有评论一起实现才能在探花app上显示页面。 1.3:代码实现 接收请求的app服务端...
「独家解析」ShardingSphere分库分表技术实践,助力MySQL性能提升_雍州无名的技术博客_51CTO博客
文章目录 1.什么是分库分表 2.分库分表之垂直拆分 3.分库分表之水平切分 4.什么是 ShardingSphere-JDBC 5.Sharding-JDBC 分表实操 6.配置 Sharding-JDBC 分片策略 7.Sharding-JDBC 实现水平分库 8.Sharding-JDBC 实现垂直分库 9.Sharding-JDBC 公共表 雍州无名 2023-04-20 09:47:28 博主文章分类:Apache ©著作权 文章标签 spring 数据库 ci 文章分类 开源 ©著作权归作者所有:来自51CTO博客作者雍州无名的原创作品,请联系作者获取转载授权,否则将追究法律责任 Apache ShardingSphere 是一个开源的分布式数据库中间件解决方案组成的生态圈。它由三个产品组成:JDBC、Proxy 和 Sidecar。这些产品相互独立,但可以混合部署和配合使用,以提供标准化的数据分片、分布式事务和数据库治理功能。 JDBC 是 ShardingSphere 的基础组件,提供数据分片和读写分离等功能,可以与任何标准的 JDBC...
5.小程序用户的登录以及绑定_今天你又学习了吗的博客-CSDN博客
1.首先对小程序的登录流程简单讲解 游客:只要进入小程序就默认为游客身份,就算是游客也需要获取用户唯一标识 OpenID ,存入用户表 学生:学生信息由学校导入,学生进入后可以通过学号、手机号、姓名和身份证后6位进行绑定 导师:导师信息由学校导入,导师进入后可以通过手机号、工号、姓名进行绑定 《微信开放文档》: 简述一下步骤: 用户第一次进入小程序,前端调用 wx.login() 获取临时登录凭证code ,将code传给后端 后端通过code请求微信接口服务获取用户的OpenID,用OpenID来创建用户存入用户表 再通过用户编号、用户类型(会员/管理员)、客户端编号来创建Token令牌并返回给前端 Token令牌有过期时间,在有效期内用户可以直接进入 当过了有效期后,就会再次通过code得到OpenID(同一个微信用户OpenID是不变的),当用户表中有OpenID时,不用再次创建,直接返回该用户,创建Token令牌返回前端 2.登录流程代码 通过code获取openid @Data @NoArgsConstructor @AllArgsConstructor...
6步带你用Spring Boot开发出商城高并发秒杀系统
摘要:本博客将介绍如何使用 Spring Boot 实现一个简单的商城秒杀系统,并通过使用 Redis 和 MySQL 来增强其性能和可靠性。 本文分享自华为云社区《Spring Boot实现商城高并发秒杀案例》,作者:林欣。 随着经济的发展和人们消费观念的转变,电子商务逐渐成为人们购物的主要方式之一。高并发是电子商务网站面临的一个重要挑战。本博客将介绍如何使用 Spring Boot 实现一个简单的商城秒杀系统,并通过使用 Redis 和 MySQL 来增强其性能和可靠性。 准备工作 在开始之前,您需要准备以下工具和环境: JDK 1.8 或更高版本 Redis MySQL MyBatis 实现步骤 首先,我们需要创建一个数据库来存储商品信息、订单信息和秒杀活动信息。在这里,我们使用 MySQL 数据库,创建一个名为 shop 的数据库,并建立三个表 goods、order 和 seckill。 表 goods 存储了所有的商品信息,包括商品编号、名称、描述、价格和库存数量等等。 CREATE TABLE `goods` ( `id` int(11) NOT NULL...
Seata锁等待超时问题排查 - 废物大师兄 - 博客园
生产环境,一个简单的事务方法,提交失败,报 Global lock wait timeout 伪代码如下: @GlobalTransactional(rollbackFor = Exception.class,timeoutMills = 30000,lockRetryInternal=3000,lockRetryTimes=10) @Override public Boolean cancel(Long id, Long userId, Long companyId) { // 保存业务数据 ... // 启动工作流 wkflAppServiceProvider.startProcess(....); ...
WebSocket集群解决方案,不用MQ - 十月南城 - 博客园
首先不了解WebSocket的可以先看看这篇文章,以及传统的WebSocket方案是怎么做的,https://www.cnblogs.com/jeremylai7/p/16875115.html 这是用MQ解决的版本,那么这种方案存在什么问题呢。 第一:增加MQ,可能造成消息挤压、消息顺序的问题 第二:增加MQ,则还需要保证MQ的可用性 第三:每个socket服务都需要去消费消息,增加每个服务的压力(做无用功) 那么,基于以上问题,还有没有解决方案呢? 当然有!!! 首先我们理解一个逻辑,为什么WebSocket不能直接做集群,socket是一个长链接,当我们要给socket用户发送消息的时候,我们不知道用户是连接到哪一个服务上面的,这样就无法直接发送消息了 那么,我们能不能给每一个socket服务器增加一个标识,然后在用户连接的时候将用户与socket服务器的关系绑定起来,然后在使用的时候再去判断用户存在哪,再给指定的服务器发送消息不就解决问题了吗? 那么,我们来结合springcloud来完成这个工作,根据这个理论,其他方式也可以实现...
EasyRelation 1.0 发布,简单强大的数据关联框架
最近发生了两起俄罗斯公司开发者被阻止向开源软件 (FOSS) 贡献代码的事件。 Sergey Semin 是任职于俄罗斯芯片制造商 Baikal Electronics 的开发者。Linux 内核邮件列表显示,他以公司员工身份贡献的补丁遭到拒绝,内核维护者回复了简短的通知: 我们不愿意接受来自贵组织生产的硬件或与之相关的补丁。 We don't feel co... 42 2
Error attempting to get column ‘xxx‘ from result set. Cause: java.sql.SQLDataException错误的解决方法
今天写好导入hive表的详情列表的接口,如下代码所示: @ResponseBody @GetMapping(value = "/xxx/importTables/detail") public ServiceStatusData localHiveImportTablesDetail( @RequestParam("datasetId") Long datasetId) { logger.info("mock数据的入参记录:datasetId={}", datasetId); if (null == datasetId) { return new ServiceStatusData(ServiceStatusData.Status.Fail, "入参错误:缺少任务id", null); } return hiveImportTaskService.localHiveImportTablesDetail(datasetId); } 启动postman访问该接口,确报出如下错误: 即Error attempting to get column 'missionId' from...
大厂防止超卖的7种实现,很受用!_ITPUB博客
首页 > IT基础架构 > 服务器/存储 > 大厂防止超卖的7种实现,很受用! 来源:https://blog.csdn.net/zxd1435513775 高并发场景在现场的日常工作中很常见,特别是在互联网公司中,这篇文章就来通过秒杀商品来模拟高并发的场景。 本文环境: SpringBoot 2.5.7 + MySQL 8.0 X + MybatisPlus + Swagger2.9.2 模拟工具: Jmeter 模拟场景: 减库存->创建订单->模拟支付 1.
微信小程序 | 基于小程序+Java+WebSocket实现实时聊天功能
一、文章前言 二、开发流程及工具准备 2.1、注册微信公众平台账号。 2.2、下载安装IntelliJ IDEA(后端语言开发工具),Mysql数据库,微信Web开发者工具。 三、开发步骤 先创建一个名为SpringBootDemo的项目,选择【New Project】 然后在弹出的下图窗口中,选择左侧菜单的【New Project】(注:和2022之前的idea版本不同,这里左侧没有【Maven】选项,不要选【Maven Archetype】!!!),输入Name(项目名):SpringBootDemo,language选择【java】,build system选择【maven】,然后选择jdk,我这里选的是jdk18.
Vue+SpringBoot实现评论功能_springboot评论功能_瑶琴遇知音的博客-CSDN博客
评论系统相信大家并不陌生,在社交网络相关的软件中是一种常见的功能。然而对于初学者来说,实现一个完整的评论系统并不容易。本文笔者以 Vue+SpringBoot 前后端分离的架构细说博客评论功能的实现思路。 对于一个评论系统主要包含评论人,评论时间,评论内容,评论回复等内容。此外可能还存在回复的回复以及回复的回复的回复,每条评论可能存在多条回复,每条回复又可能存在多条回复,即是一个多叉树的关系。因此,难点如下: 确定并存储评论与回复的层级关系以及与博客本章的从属关系 多层级评论与回复的前端递归显示 多层级评论与回复的递归删除 数据表设计 首先我们需要考虑的是数据表中如何存储评论与回复的层级关系以及与博客文章的从属关系。 很直观能够想到对于每一条评论,拥有一个表示所属博客文章ID的字段blogId 每一条评论维护一个parentId字段,表示父评论的id,由此确定评论之间的层级关系 此外我们还会维护一个rootParentId字段,表示当前评论所属根评论的id,该字段将在前端递归显示时有大用 于是,添加上其他相关信息后最终的数据表schema如下:...
分布式事务 seata 最全入门教程
基本介绍 什么是分布式事务 指一次大的操作由不同的小操作组成的,这些小的操作分布在不同的服务器上,分布式事务需要保证这些小操作要么全部成功,要么全部失败。从本质上来说,分布式事务就是为了保证不同数据库的数据一致性。 为什么要使用分布式事务 在微服务独立数据源的思想,每一个微服务都有一个或者多个数据源,虽然单机单库事务已经非常成熟,但是由于网路延迟和不可靠的客观因素,分布式事务到现在也还没有成熟的方案,对于中大型网站,特别是涉及到交易的网站,一旦将服务拆分微服务,分布式事务一定是绕不开的一个组件,通常解决分布式事务问题。 seata 分布式事务 Seata是阿里开源的一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。 Seata目标打造一站式的分布事务的解决方案,最终会提供四种事务模式: AT 模式:参见(《Seata AT 模式》 (opens new window))文档 TCC 模式:参见(《Seata TCC 模式》 (opens new window))文档 Saga 模式:参见(《SEATA Saga 模式》 (opens new...
【Java设计模式 规范与重构】 二 重构的保障:单元测试,以及如何提高代码可测试性
其实之前的工作中强调过很多次自己做测试的重要性,例如讲单元测试的:【C#编程最佳实践 一】单元测试实践,讲单元测试规范的【阿里巴巴Java编程规范学习 四】Java质量安全规约,讲接口测试的:【C#编程最佳实践 十三】接口测试实践,这里旧事重提就不再详细展开了,回顾下单元测试的基本概念,重点来看如何提升代码的可测试性。 依次从WHAT,WHY,HOW,HOW去了解。 什么是单元测试 单元测试由RD自己来编写,用来测试自己写的代码的正确性。它与集成测试的区别是测试粒度 集成测试的测试对象是整个系统或者某个功能模块,比如测试用户注册、登录功能是否正常,是一种端到端(end to end)的测试。 单元测试的测试对象是类或者函数,用来测试一个类和函数是否都按照预期的逻辑执行。这是代码层级的测试 单元测试相对于集成测试(Integration Testing)来说,测试的粒度更小一些。 写单元测试的好处 单元测试除了能有效地为重构保驾护航之外,也是保证代码质量最有效的两个手段之一(另一个是 Code Review),写单元测试有如下好处: 写单元测试能有效地发现代码中的...
SpringCloud-Eureka注册中心_springcloud注册中心eureka_不会压弯的小飞侠的博客-CSDN博客
🔥服务拆分 服务拆分注意事项 1.单一职责:不同微服务,不要重复开发相同业务 2.数据独立:不要访问其它微服务的数据库 3.面向服务︰将自己的业务暴露为接口,供其它微服务调用 准备工作,创建一个Cloud-demo项目工程。 实现功能 order-service根据id查询订单 order-user根据id查询用户 项目结构 sql导入数据库 cloud-order.sql CREATE TABLE `tb_order` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '订单id', `user_id` bigint(20) NOT NULL COMMENT '用户id', `name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '商品名称', `price` bigint(20) NOT NULL COMMENT '商品价格', `num` int(10) NULL DEFAULT 0 COMMENT...
Show More
loading
Actions
Is this you?
As a journalist, you can create a free Muck Rack account to customize your profile, list your contact preferences, and upload a portfolio of your best work.Get in touch with Long
Contact Long, search articles and posts on X, monitor coverage, and track replies from one place.
Learn more about Muck Rack