线程池优化消息发送|学习笔记

简介: 快速学习线程池优化消息发送

开发者学堂课程【RocketMQ 知识精讲与项目实战(第二阶段)线程池优化消息发送】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/703/detail/12438


线程池优化消息发送


第五步是在发送消息第六步是等待消息发送的结果如果发送成功删除数据库持久化的消息内容势必要等到mq接收消息成功第六步进行数据库的处理两步会耗费一定的时间如果当前支付的请求比较多第三方的支付平台在回调时会遭到请求的堆积这两步处理都是在主线程中进行处理的所以可以创建线程池进行优化处理

//5.发送消息到MQ

sendResult result = sendMessage(topic, tag, String.

valueOf(tradePay . getPayId()),

if(result . getSendStatus() . equals(SendStatus .SEND_ OK))

{

Log. info("消息发送成功");

//6.等待发送结果, 如果MQ接受到消息,删除发送成功的消息

mqProducerTempMapper .deleteByPrimaryKey(tradeMqProducerTemp . getId());

Log. info("持久化到数据库的消息删除");

}

在 spring 容器中创建线程池 bean 对象创建 getThreadPool,设置当前的属性信息默认线程池4最大有8个线程队列的大小是100。

@Bean

public ThreadPoolTaskExecutor getThreadPool() {

ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor() ;

executor. setCorePoolsize (4);

executor. setMaxPoolSize(8);

executor . setQueueCapacity(100);

executor. setKeepAliveSeconds (60);

executor . setThreadNamePrefix("Pool-A");

executor. setRejectedExecutionHandler (new ThreadPool Executor. callerRunsPolicy());

executor. initialize();

return executor;

}

把 bean 注入到 spring 容器就可以进行优化当前对象的创建是在入口类进行处理

@Autowired

Private ThreadPoolTaskExecutor threadPoolTaskExecutor;

使用线程池优化第五步和第六步

//在线程池中进行处理

threadPoolTaskExecutor . submit(new Runnable() {

@Override

public void

run( ){

//5.发送消息到MQ

sendResult result = sendMessage(topic, tag, String.

valueOf(tradePay . getPayId()),

if(result . getSendStatus() . equals(SendStatus .SEND_ OK))

{

Log. info("消息发送成功");

//6.等待发送结果, 如果MQ接受到消息,删除发送成功的消息

mqProducerTempMapper .deleteByPrimaryKey(tradeMqProducerTemp . getId());

Log. info("持久化到数据库的消息删除");

}

}

}}

整个业务没有变只是对线程池进行了优化

报错是因为当前项目在运行时才会注入对应的Mapper,不是代码的问题是编译器的问题不用管

@Autowired

private TradePayMapper tradePayMapper;

@Autowired

Private TradeMqProducerTempMapper mqProducerTempMapper;

相关实践学习
RocketMQ一站式入门使用
从源码编译、部署broker、部署namesrv,使用java客户端首发消息等一站式入门RocketMQ。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
8天前
|
Java 数据库 Android开发
【专栏】Kotlin在Android开发中的多线程优化,包括线程池、协程的使用,任务分解、避免阻塞操作以及资源管理
【4月更文挑战第27天】本文探讨了Kotlin在Android开发中的多线程优化,包括线程池、协程的使用,任务分解、避免阻塞操作以及资源管理。通过案例分析展示了网络请求、图像处理和数据库操作的优化实践。同时,文章指出并发编程的挑战,如性能评估、调试及兼容性问题,并强调了多线程优化对提升应用性能的重要性。开发者应持续学习和探索新的优化策略,以适应移动应用市场的竞争需求。
|
8天前
|
Java
深入理解Java并发编程:线程池的应用与优化
【4月更文挑战第3天】 在Java并发编程中,线程池是一种重要的资源管理工具,它能有效地控制和管理线程的数量,提高系统性能。本文将深入探讨Java线程池的工作原理、应用场景以及优化策略,帮助读者更好地理解和应用线程池。
|
5天前
|
Java
深入理解Java并发编程:线程池的应用与优化
【5月更文挑战第18天】本文将深入探讨Java并发编程中的重要概念——线程池。我们将了解线程池的基本概念,应用场景,以及如何优化线程池的性能。通过实例分析,我们将看到线程池如何提高系统性能,减少资源消耗,并提高系统的响应速度。
15 5
|
8天前
|
Java 数据库连接 程序员
【后台开发】TinyWebser学习笔记(2)线程池、数据库连接池
【后台开发】TinyWebser学习笔记(2)线程池、数据库连接池
20 4
|
8天前
|
安全 Java 程序员
【Java多线程】面试常考——锁策略、synchronized的锁升级优化过程以及CAS(Compare and swap)
【Java多线程】面试常考——锁策略、synchronized的锁升级优化过程以及CAS(Compare and swap)
13 0
多线程学习笔记(一)
创建线程有3种方式:继承Thread类、实现Runnable接口或Callable接口。继承Thread类时,重写run()方法并调用start()启动线程。实现Runnable接口时,实现run()方法,通过Thread的target创建线程对象并用start()启动。
|
8天前
|
Java C++
多线程学习笔记(二)
1. 子线程先执行:启动子线程后立即调用`join()`,主线程会等待子线程完成。 `suspend()`方法。 3. `synchronized` vs `Lock`:前者是关键字,后者是接口;前者可用在代码块和方法,后者在代码中显式;前者自动释放锁,后者需`finally`释放;前者无超时/中断控制,后者可设定;前者非公平,后者可公平/不公平,且支持读写锁。 4. `synchronized`底层实现:基于 Monitor 模型,JVM层面的锁定机制,通过 monitors 和 monitorenter/monitorexit 指令实现。
|
8天前
|
存储 缓存 前端开发
Java串口通信技术探究3:RXTX库线程 优化系统性能的SerialPortEventListener类
Java串口通信技术探究3:RXTX库线程 优化系统性能的SerialPortEventListener类
68 3
|
8天前
|
消息中间件 缓存 NoSQL
Java多线程实战-CompletableFuture异步编程优化查询接口响应速度
Java多线程实战-CompletableFuture异步编程优化查询接口响应速度
|
8天前
|
Java 开发者
Java中多线程并发控制的实现与优化
【4月更文挑战第17天】 在现代软件开发中,多线程编程已成为提升应用性能和响应能力的关键手段。特别是在Java语言中,由于其平台无关性和强大的运行时环境,多线程技术的应用尤为广泛。本文将深入探讨Java多线程的并发控制机制,包括基本的同步方法、死锁问题以及高级并发工具如java.util.concurrent包的使用。通过分析多线程环境下的竞态条件、资源争夺和线程协调问题,我们提出了一系列实现和优化策略,旨在帮助开发者构建更加健壮、高效的多线程应用。
9 0