首页 > 其他分享 >Spring Batch

Spring Batch

时间:2024-06-23 20:58:55浏览次数:26  
标签:处理 Spring 分区 Batch RabbitMQ 消息 QueueChannel 应用程序

项目是做历史表的Migration

锁定一定数量的历史表A,B,C, 每张历史表在配置表里有一张记录, 包括需要distinct的关键字段,包括分区大小,core大小(逻辑分区)以及一个参数(select_clause, 历史表的条件比如时间)

举例子, 数据库配置表里 历史表A 的distinct字段country_code 到60w条数据, 分区大小为2000, 大概分区有300个

mstr表里记录JobId &Job状态& 开始时间 &更写时间 & 主机IP&读写数量(用于搬运前后数据一致的校验)&错误日志

dtl表里写入JobId &分区序号&country_code 

300个partition再根据core大小, 分到不同的

参数的传递通过塞到JobContext上下域来传递

300个分区,一次性太多,作为message处理,

 node partition( 300分区, core为10, 那么每个nodelist里有30个分区,比如1,11,21,31... 分区和和状态拼接成String类型, Jobid带上,正向或反向做migrate, 放到ExectuteContext里 )5个slave节点 处理10个逻辑节点

 

remote slave 节点处理:

拿到某一个二层分区(包含1,11,21,31,41拼凑的String,然后给他解析成一层分区的状态)

100G 8-9h

springbatch有自己的表结构

遇到的问题

性能如何提升

主从结构

 

出现问题?

读写 sql优化, oracle有一些函数,hits parallel 

 

 

 

理解 QueueChannel 和 RabbitMQ 的角色

RabbitMQ 的作用

RabbitMQ 是一个消息代理系统,通常用于:

  1. 消息持久化:将消息存储在磁盘上,以确保即使系统崩溃,消息也不会丢失。
  2. 跨系统通信:在不同的服务或应用程序之间传递消息。
  3. 负载均衡:将消息分发到多个消费者,提供负载均衡功能。
  4. 消息路由:根据路由键和交换器类型,将消息路由到不同的队列。

QueueChannel 的作用

QueueChannel 是 Spring Integration 中的一种通道实现,用于在应用程序内部传递消息。它的主要作用包括:

  1. 缓冲消息:在内存中存储消息,支持异步处理和流控。
  2. 应用内部通信:在应用程序内部的各个组件之间传递消息。
  3. 消息队列语义:提供队列的语义,如先进先出(FIFO)消息处理。
  4. 处理器解耦:解耦消息生产者和消费者,使得他们可以独立于彼此运行。

为什么在使用 RabbitMQ 时还需要 QueueChannel

1. 缓冲和流控

在高负载情况下,RabbitMQ 可能会发送大量消息到应用程序。如果应用程序的处理速度跟不上消息的接收速度,QueueChannel 可以在内存中临时存储这些消息,避免消息处理的拥塞。它类似于一个缓冲区,能够平滑消息流,防止消息处理器被消息洪流压垮。

2. 解耦异步处理

QueueChannel 使得消息的接收和处理可以异步进行。例如,你可以从 RabbitMQ 接收消息并放入 QueueChannel,然后由另一线程从 QueueChannel 中提取消息进行处理。这种解耦机制提高了系统的灵活性和响应性。

3. 本地消息中转

有时,你可能希望在应用程序内部进行一些消息处理或过滤,然后再决定是否将消息发送到 RabbitMQ 或者其他外部系统。QueueChannel 可以作为一个中转站,方便对消息进行处理、过滤或转发。

4. 提高系统弹性

QueueChannel 提供了一个额外的缓冲层,使得系统在面对网络延迟、RabbitMQ 负载过高或暂时不可用等情况时,能够继续接受并处理消息,提高系统的弹性和稳定性。

5. 内部消息队列

在某些场景下,你可能只需要在应用程序内部传递消息而不需要通过 RabbitMQ。QueueChannel 作为一个轻量级的消息队列,适合这种本地消息传递。

使用 DirectChannel 替代 QueueChannel

DirectChannel 是另一种 Spring Integration 提供的通道,它直接将消息传递给订阅者,而不进行消息的存储和排队。使用 DirectChannel 可以减少消息在系统中的滞留时间,提高消息传递的效率,但这也意味着它没有缓冲功能,无法处理消息激增带来的负载问题。

适用场景

  • 低延迟消息传递:消息需要立即传递给处理器,没有等待时间。
  • 负载较低:系统中消息量较小,不需要额外的消息缓冲。
  • 简单的点对点通信:不需要复杂的消息路由和队列语义。

不适用场景

  • 高负载情况:在消息量较大的情况下,DirectChannel 可能无法有效处理所有消息,容易导致消息丢失或系统崩溃。
  • 需要消息缓冲:如果需要对消息进行缓冲和流控,DirectChannel 不适合。

 

标签:处理,Spring,分区,Batch,RabbitMQ,消息,QueueChannel,应用程序
From: https://www.cnblogs.com/spicy-food/p/18263895

相关文章

  • 基于SpringBoot+Vue农产品管理与销售APP设计和实现(源码+LW+调试文档+讲解等)
    ......
  • SpringCloud学习Day4
    熔断与限流:Sentinel1.概念Sentinel是面向分布式、多语言异构化服务架构的流量治理组件2.基本使用1.在应用中导入相关jar包,即在pom.xml添加以下依赖<dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-core</artifactId><version>1.8.......
  • Java项目:springboot汉服文化bbs商城系统(计算机毕业设计)
    作者主页:Java毕设网 简介:Java领域优质创作者、Java项目、学习资料、技术互助文末获取源码一、项目介绍汉服文化bbs商城系统,主要分为前后台。共分两种角色:管理员与普通用户;管理员可登录前后台,普通用户仅可登录前台;普通用户登录后可发布、修改、删除自己的文章;前台主要......
  • 后端开发Spring框架之消息 消息队列案例--订单短信通知
    消息队列案例首先我们书写一个业务层接口定义的是发送消息短信消息处理packagecom.bigdata1421.message.service;publicinterfaceOrderService{voidorder(Stringid);}创建业务层的实现类并且我们要重写方法这里就是打印日志将消息打印在控制台再写......
  • 基于JavaSpringBoot+Vue+uniapp技术的微信小程序鲜花商城购物系统设计与实现
    博主介绍:硕士研究生,专注于Java技术领域开发与管理,以及毕业项目实战✌    从事基于javaBS架构、CS架构、c/c++编程工作近16年,拥有近12年的管理工作经验,拥有较丰富的技术架构思想、较扎实的技术功底和资深的项目管理经验。    先后担任过技术总监、部门经理、......
  • 基于Spring Boot的MyBatis整合示例:构建简单的用户管理系统
    目录1.创建一个新的SpringBoot项目2.添加必要的依赖3.配置数据库连接4.创建实体类5.创建Mapper接口6.创建MapperXML文件7.创建Service类8.创建Controller类9.启动应用程序10.测试在当今的软件开发中,SpringBoot和MyBatis作为两个流行的Java框架,常常被......
  • 对于spring cloud的了解到入门
    一、SpringCloud介绍1.概念:Springcloud是一系列框架的有序集合。它利用springboot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用springboot的开发风格做到一键启动和部署。2.优缺点(主......
  • SpringBoot发送邮件
    SpringBoot集成邮件服务本文将介绍如何使用SpringBoot集成QQ邮箱的邮件服务,实现Java发送邮件功能。开启邮件服务以QQ邮箱为例,首先需要开启SMTP服务。第一步首页点击设置第二步点击账号第三步下滑找到SMTP相关文件服务,获取验证码第四步复制获取到的授权......
  • SpringBoot使用spring.factories加载默认配置
    在日常开发过程中,发布一些产品或者框架时,会遇到某些功能需要一些配置才能正常运行,这时我们需要的提供默认配置项,同时用户也能覆盖进行个性化创建InitializerpublicclassFrameContextInitializerimplementsApplicationContextInitializer{@Overridepublicvoid......
  • 任务调度SpringTask入门
    任务调度简介1.1什么是任务调度在企业级应用中,经常会制定一些“计划任务”,即在某个时间点做某件事情,核心是以时间为关注点,即在一个特定的时间点,系统执行指定的一个操作。常见的任务调度框架有Quartz和SpringTask等。SpringTask入门1.2SpringTask入门小Demo创建模块52xbc-......