java队列处理高并发_Java高并发--消息队列

article/2025/9/19 2:08:20

Java高并发--消息队列

举个例子:在购物商城下单后,希望购买者能收到短信或者邮件通知。有一种做法时在下单逻辑执行后调用短信发送的API,如果此时服务器响应较慢、短信客户端出现问题等诸多原因购买者不能正常收到短信,那么此时是不断重试呢还是直接放弃发送呢?不管选择哪一种,在实现上都会变得复杂。

消息队列是如何解决的呢?可以讲发送短信这个过程封装成一条消息,发送到消息队列,消息队列按照一定顺序依次处理队列中的消息,在某一个时刻就会处理刚才收到的发送短信的消息。消息队列会通知一个服务去发送这个短信,顺利的话这个消息刚被放进队列就会被处理,这种情况一次性就发送成功了。如果出现了什么问题,可以再次将该消息放进消息队列中等待处理。

6a35c90dcb18

image

上面的例子中如果使用消息队列,其好处是将发送短信这个流程与其他功能解耦,发送短信时只需要保证将这条消息发送到消息队列就行了,然后就可以处理发送短信后的其他事情了;其次,系统设计变得简单,不用在下单的场景下过多的考虑发送短信的问题,而是交给了消息队列来处理这个事。而且可以保证消息一定会被发送出去,消息只要没有发送成功会不断被重新加入到消息队列。如果短信服务出现问题,那么等到服务恢复了,消息队列再发送出去即可,只是发送的不那么及时而已。

消息队列的特性

和业务无关:只负责消息分发

FIFO:先投递先到达

容灾:得益于节点的动态增删和消息的持久化

性能:吞吐量提升,系统内部通信效率提高

什么时候需要消息队列呢?当生产和消费的速度和稳定性等因素不一致时,消息队列可以弥补双方的差异。

消息队列的好处:

业务解耦

最终一致性(两个系统的状态保持一致,要么都成功要么都失败)

广播

错峰与流控


http://chatgpt.dhexx.cn/article/1TvVi6mC.shtml

相关文章

Java如何解决高并发的问题? 可以试试这些方法

大家好,我是小武,一个工作10年的程序员,就职于鹅厂,平时喜欢搞搞副业。 在工作中,我们经常会遇到高并发的问题,这个是很常见的,只要用户访问量一多的情况下,那么我们的网站就会变慢&…

单例模式的五种写法

设计模式(Design pattern),提供了在软件开发过程中面临的一些问题的最佳解决方案,是Java开发者必修的一门课程。主要分创建型模式、结构型模式和行为型模式。其中接下来我们要写的是单例模式,属于创建型模式。 单例模式…

JAVA单例模式代码实现

JAVA常见的设计模式之单例模式 懒汉模式 懒汉式是典型的时间换空间,也就是每次获取实例都会进行判断,看是否需要创建实例,浪费判断的时间。当然,如果一直没有人使用的话,那就不会创建实例,则节约内存空间(…

单例模式编写

单例">什么是单例 单例是保证一个内存/进程里只有一个类的实例,并提供一个访问它的全局访问点。 内存/进程中只有一个实例线程安全性能优化防止序列化产生新对象 写一个单例模式 1、饿汉模式 public class Singleton {//饿汉模式private static Single…

设计模式——单例模式八种方式实现与分析(附代码示例)

一. 概念 所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法(静态方法)。 单例模式保证了系统内存中该类只存在一个对象&#xf…

C++ 单例模式 代码详解

单例模式 单例模式(Singleton Pattern)是 最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被…

[设计模式] -- 单例模式

Emai : hahayacodergmail.com 背景 最近在公司的项目中,经常会用到单例模式,由于之前没有想过怎么正确使用单例模式,导致写成的程序中有BUG。在学习Cocos2d-x时,导演类CCDirector等都是单例类。所以从头开始学习单例模式。 介绍 …

单例模式介绍

目录 1 前言 2 单例模式类型 2.1 饿汉式: 2.2 懒汉式: 2.2.1 双重检查锁 2.2.2 volatile防止指令重排 2.3 静态内部类 3 破坏单例 1 前言 单例模式是指在内存中有且只会创建一次对象的设计模式,在程序中多次使用同一个对象且作用相同…

单例模式详解(附常见的7种单例模式源码)

单例模式(Singleton Pattern):保证一个类仅有一个对象,并提供一个访问它的全局访问点。(Ensure a class only has one instance,and provide a globe point of access to it.) 常见应用场景: Windows的Task Manager(…

设计模式(一)—单例模式(附Java代码)

单例模式(Singleton Pattern):采取一定的方法保证在整个的软件系统中,对于某个类只能存在一个对象实例,并且该类只提供一个取得其实例对象的方法。 比如Hibernate的SessionFactory,它充当数据存储源的代理,…

线程的运行状态

不管是多线程还是多进程,实际上都不太可能一直占用CPU资源,所有多线程的几种状态一定要掌握。 多线程的状态如下图: 所有的系统费资源是有限的,不管是多线程还是多进程都必须在执行一段时间后让出资源,交由其他的线程…

一条SQL语句统计总数及各状态数

需求:共有协议X份,已签XX份,待签X份 sql: select count(1) 总记录数,sum(case when XY_STATUS1 then 1 else 0 end)待签,sum(case when XY_STATUS2 then 1 else 0 end)已签 from YG.T_ZHGL 结果: count(1):所有数据&#xff…

线程的执行状态

1,创建: 当创建好线程对象的时候,也就是new Thread类或者是new Thread子类的时候。此时称为创建状态 2,就绪: 当线程对象调用了start()方法,开启线程了的时候,此时的线程已经开启了&…

Java线程线程的状态

1、线程的状态 线程有六种状态:分别如下 ① NEW(新建) 线程刚被创建,但是并未启动。还没调用start方法 ② Runnable(可运行) 线程可以在java虚拟机中运行的状态,可能正在运行自己代码,也可能没有,这取决于操作系统…

Java多线程批量执行sql

当遇到大sql批量导入时几十万上百万数据,使用plsql执行等都是非常的慢。因此开发一套自定义线程池处理sql: 1,线程代码 import java.util.ArrayList;/*** ClassName: com.ai.order.esb.yulang.tools.handle* Description: TODO* version: v1…

一条SQL语句是如何执行的?

大家六一儿童节好呀! 接下来的一段时间内,将带领大家一同探索MySQL的奥妙,加油吧!我们。 下面进入正题:一条SQL语句是如何进行的? 对于这个问题,我想将其分为两个问题来回答,分别是…

mysql 查看线程状态

show full PROCESSLIST 打开两个查询窗口,在A窗口执行一个查询时间较长的sql,在B窗口使用show full PROCESSLIST,可以看到A中执行的sql时间。 sleep表示没有操作,query表示正在查询。

线程状态总结

目录 文章目录 前言 一、线程状态图解 二、线程的几种状态 及线程过程 1.线程的几种状态 2.线程过程 总结 前言 总结了在华清远见这段时间所学的线程相关的知识点,文章记录了线程的几种状态及线程的过程 提示:以下是本篇文章正文内容,下面案…

线程状态

原文:https://mp.weixin.qq.com/s/GsxeFM7QWuR--Kbpb7At2w 人类为了利用好自己的时间,经常会同时做多件事情,比如上厕所时刷手机,开车时听新闻... 对于自己尚且如此,对计算机也不能闲着。为了最大化的提升机器利用率&…

一条SQL语句的执行过程

摘要 本文站在后端开发的角度,讲述一条SQL从客户端发送到MySQL服务器进行处理,并将结果返回给客户端的过程。这个过程中涉及的操作会在后面的文章中做详细的分析。 连接建立 我们通常使用ORM框架来生成SQL语句,在发送SQL语句给MySQL服务器…