java队列的应用_java消息队列,业务应用场景概述-程序员宅基地

技术标签: java队列的应用  

1. 异步处理

场景说明:用户注册后,需要发注册邮件和注册短信。传统的做法有两种 1.串行的方式;2.并行方式

a、串行方式:将注册信息写入数据库成功后,发送注册邮件,再发送注册短信。以上三个任务全部完成后,返回给客户端。

b、并行方式:将注册信息写入数据库成功后,发送注册邮件的同时,发送注册短信。以上三个任务完成后,返回给客户端。与串行的差别是,并行的方式可以提高处理的时间

假设三个业务节点每个使用50毫秒钟,不考虑网络等其他开销,则串行方式的时间是150毫秒,并行的时间可能是100毫秒。

因为CPU在单位时间内处理的请求数是一定的,假设CPU1秒内吞吐量是100次。则串行方式1秒内CPU可处理的请求量是7次(1000/150)。并行方式处理的请求量是10次(1000/100)

小结:如以上案例描述,传统的方式系统的性能(并发量,吞吐量,响应时间)会有瓶颈。如何解决这个问题呢?

引入消息队列,将不是必须的业务逻辑,异步处理。改造后的架构如下:

按照以上约定,用户的响应时间相当于是注册信息写入数据库的时间,也就是50毫秒。注册邮件,发送短信写入消息队列后,直接返回,因此写入消息队列的速度很快,基本可以忽略,因此用户的响应时间可能是50毫秒。因此架构改变后,系统的吞吐量提高到每秒20 QPS。比串行提高了3倍,比并行提高了两倍。

2.应用解耦

场景说明:用户下单后,订单系统需要通知库存系统。传统的做法是,订单系统调用库存系统的接口。如下图:

传统模式的缺点:假如库存系统无法访问,则订单减库存将失败,从而导致订单失败,订单系统与库存系统耦合

如何解决以上问题呢?引入应用消息队列后的方案,如下图:

订单系统:用户下单后,订单系统完成持久化处理,将消息写入消息队列,返回用户订单下单成功

库存系统:订阅下单的消息,采用拉/推的方式,获取下单信息,库存系统根据下单信息,进行库存操作

假如:在下单时库存系统不能正常使用。也不影响正常下单,因为下单后,订单系统写入消息队列就不再关心其他的后续操作了。实现订单系统与库存系统的应用解耦

3.流量削锋

流量削锋也是消息队列中的常用场景,一般在秒杀或团抢活动中使用广泛。

应用场景:秒杀活动,一般会因为流量过大,导致流量暴增,应用挂掉。为解决这个问题,一般需要在应用前端加入消息队列。

a、可以控制活动的人数

b、可以缓解短时间内高流量压垮应用

用户的请求,服务器接收后,首先写入消息队列。假如消息队列长度超过最大数量,则直接抛弃用户请求或跳转到错误页面。

秒杀业务根据消息队列中的请求信息,再做后续处理

4.日志处理

日志处理是指将消息队列用在日志处理中,比如Kafka的应用,解决大量日志传输的问题。架构简化如下

日志采集客户端,负责日志数据采集,定时写受写入Kafka队列

Kafka消息队列,负责日志数据的接收,存储和转发

日志处理应用:订阅并消费kafka队列中的日志数据

5.消息通讯

消息通讯是指,消息队列一般都内置了高效的通信机制,因此也可以用在纯的消息通讯。比如实现点对点消息队列,或者聊天室等

点对点通讯:

客户端A和客户端B使用同一队列,进行消息通讯。

聊天室通讯:

客户端A,客户端B,客户端N订阅同一主题,进行消息发布和接收。实现类似聊天室效果

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_42130786/article/details/114058791

智能推荐

原生js实现搜索历史记录案例_js 最近搜索记录-程序员宅基地

文章浏览阅读2.6k次,点赞8次,收藏22次。<header> <input type="text" id="search"> <input type="button" id="btn" value="搜索"> </header> <main> <div> <h3>搜索记录</h3> <span id="clear">清空&l..._js 最近搜索记录

熟悉RMAN-程序员宅基地

文章浏览阅读290次。1.1 启动,关闭数据库 C:\Users\Aiolos>RMAN TARGET / 关闭:RMAN> SHUTDOWN IMMEDIATE 启动:RMAN> STARTUP MOUNT->RMAN> ALTER DATABASE OPEN;1.2 执行操作系统命令 RMAN> HOST;--进入到操作系统的命令环境 C:\Users\Aiolos>exit --

spring解决跨域-程序员宅基地

文章浏览阅读77次。https://blog.csdn.net/qq_43486273/article/details/832725001.使用过滤器解决跨域问题package com.zhizous.blogs.servlet;import org.springframework.stereotype.Component;import javax.servlet.*;imp..._zhizous

在网上发现一款很不错的JS编码工具,完善的编码智能提示,还可以运行调_js编码的代码提示-程序员宅基地

文章浏览阅读837次。在网上发现一款很不错的JS编码工具,免费的,拥有完善的js html编码智能提示,还可以运行调试。名字叫:Free javascript editor 贴出来和大家分享一下Free JavaScript Editor_js编码的代码提示

【C语言】【递归函数】用递归函数求斐波那契数列前N项和(二)_利用函数递归求fib数列前n项和-程序员宅基地

文章浏览阅读7.5k次,点赞2次,收藏14次。【递归函数】用递归函数求斐波那契数列前N项和(二)题目描述输入输出样例输入样例输出分析代码实现题目描述斐波那契数列定义:an=an-1+an-2,即第n项值等于前两项之和。已知斐波那契数列第一、第二项值为1,1,求该数列前n项之和输入第一行输入m,表示有m个斐波那契数列要求和接下去n行都输入一个整数n ,n不大于30输出m个斐波那契数列的和的结果,每行一个,一共m行样..._利用函数递归求fib数列前n项和

Android 多文件监听的实现_android 监测所有文件删除 multifileobserver-程序员宅基地

文章浏览阅读5.3k次。android.os下的FileObserver类是一个用于监听文件访问、创建、修改、删除、移动等操作的监听器,基于linux的inotify。 FileObserver 是个抽象类,必须继承它才能使用。每个FileObserver对象监听一个单独的文件或者文件夹,如果监视的是一个文件夹,那么文件夹下所有的文件和级联子目录的改变都会触发监听的事件。 以上是文档中的大概描述,本人做了_android 监测所有文件删除 multifileobserver

随便推点

linux gcc 查看版本号,如何查看Linux或者gcc版本-程序员宅基地

文章浏览阅读1.8w次,点赞3次,收藏6次。匿名用户1级2016-12-29 回答1. 查看Linux版本cat/etc/issueLinaro 12.07 \n \l2. 查看内核版本1)cat/proc/versionLinux version 2.6.38-13-generic(buildd@rothera) (gcc version 4.5.2 (Ubuntu/Linaro 4.5.2-8ubuntu4)) #57-Ubuntu S..._gcc version

802.1x之CA证书的配置-程序员宅基地

文章浏览阅读1.2k次。之前一直有人问CA证书怎么配置才能成功使用.现将我参考的一篇文章贡献出来,希望对大家有所帮助。注:这里引用的文章是实现智能卡与证书所需要的配置,如果想使用PEAP,原理类似,证书不太一样就是了。下面的表格有写出来。大家举一反三,自己做吧。使用EAP-TLS(智能卡与证书)实现802.1X----验证服务器和交换机相关配置For this configuration..._802.1x 证书

操作系统课设——页面置换算法的模拟_页面置换算法模拟程序-程序员宅基地

文章浏览阅读2.3k次。本课设主要实现FIFO算法和LRU算法,虽然实现了功能,但是个人感觉代码可以优化,而且采用的主存块数是3,如果主存块数修改了,那么代码也需要修改,这是我课设不足之处,望大神来指教!下面是我的代码#include #include #define PAGE_NUM 3 //主存块数#define SERIAL_NUM 12 //访问序列的次数int serial[SERI_页面置换算法模拟程序

Android开发经验谈:请谈下Android消息机制,已拿到offer-程序员宅基地

文章浏览阅读139次。开头很多人说Android开发前景越来越差了 我觉得这个回答是片面的首先Android应用开发前景差是在最近两年出现的,也就是从2018开始,从那时起移动端的程序员已经慢慢出现供大于求的局面,本人作为移动端开发,深知这一点。然而也必须说明一点,不论是Android开发还是iOS开发,虽然都出现了相关的程序员供大于求的情况,但市场仍然是有需求的,特别是对资深的开发人员及拥有相关底层开发知识的应用程序员市场及发展还是很多的;这里所讲的就业难都是相对于初级开发人员。为什么会在18年出现应用端就业难?这是由

Java集合 HashSet底层详解_hqshset的底层实现-程序员宅基地

文章浏览阅读1w次,点赞11次,收藏22次。前几篇文章已经介绍了关于List集合的讲解,今天学习Set集合相关的实现类。Set集合常用的如:HashSet、TreeSet。HashSet是Set集合的典型实现,HashSet按照Hash算法来存储集合中的元素,存在以下特点:不能保证元素的顺序,元素是无序的HashSet是不同步的,需要外部保持线程之间的同步问题,Collections.synchronizedSet(new XXSe..._hqshset的底层实现

5.2 OpenStack-程序员宅基地

文章浏览阅读199次。先起1再起2source admin查看状态,statuskeystone是用apache启动web界面defaultdmeodemo一、网络服务私有网络vim打开iarouterallow(重叠代地址)(2处)[root@controller ~]# yum install openstack-neutron openstack-neutron-ml2 \> openstack-neutron-linuxbridge ebtables[root@controll

推荐文章

热门文章

相关标签