今天看到我们的招聘信息有对消息队列有要求,然后就思索了一翻,网上一搜一大堆。
我可以举个小例子先说明应用场景
假设你的服务器每分钟的处理量为200个,但客户端再峰值的时候可能一分钟会发1000个消息给你,这时候你就可以把他做成队列,然后按正常有序的处理,先进后出(LIFO),先进先出(FIFO)可根据自己的情况进行定夺
stack 先进后出(LIFO)--------Java 对应的类 Stack
队列 先进先出(FIFO)--------java对应的类Queue
这两种都可用Linkedlist进行封装和实现,下面是我自己写的一个栈的例子
/**
* @author 刘伊凡
* --------->>>>>>队列的实现--------------
*/
public class MyStack<T> {
private LinkedList<T> storage = new LinkedList<T>();
public synchronized void push(T e) {//需要加上同步
storage.addFirst(e);
}
public T peek() {
return storage.getFirst();
}
public void pop() {
storage.removeFirst();
}
public boolean empty() {
return storage.isEmpty();
}
@Override
public String toString() {
return storage.toString();
}
}
下面是一个测试类
/**
* @author 刘伊凡
*
*/
public class StackTest {
public static void main(String[] args) {
MyStack<String> stack = new MyStack<String>();
for(String s : "the prefect code".split(" ")){//LIFO
stack.push(s);
}
while(!stack.empty()){
System.out.print(stack.peek()+" ");
stack.pop();
}
System.out.println();
for(char s : "写了个一句话倒起来说的程序".toCharArray()){//用例:正话反说
stack.push(String.valueOf(s));
}
while(!stack.empty()){
System.out.print(stack.peek());
stack.pop();
}
}
}
挺有意思的,让我想了,以前在学校的晚会上,主持人互动的时候会让人上台去答题拿奖品,其中有一个题目就是主持人说一句话,然后要求选手倒起来说,我们的这个程序很符合需求嘛,哈哈,我们可以用java来作弊,学以致用
消息队列的应用场景,补充(来自互联网)
个人认为消息队列的主要特点是异步处理,主要目的是减少请求响应时间和解耦。所以主要的使用场景就是将比较耗时而且不需要即时(同步)返回结果的操作作为消息放入消息队列。同时由于使用了消息队列,只要保证消息格式不变,消息的发送方和接收方并不需要彼此联系,也不需要受对方的影响,即解耦和。
使用场景的话,举个例子:
假设用户在你的软件中注册,服务端收到用户的注册请求后,它会做这些操作:
校验用户名等信息,如果没问题会在数据库中添加一个用户记录
如果是用邮箱注册会给你发送一封注册成功的邮件,手机注册则会发送一条短信
分析用户的个人信息,以便将来向他推荐一些志同道合的人,或向那些人推荐他
发送给用户一个包含操作指南的系统通知
等等……
但是对于用户来说,注册功能实际只需要第一步,只要服务端将他的账户信息存到数据库中他便可以登录上去做他想做的事情了。至于其他的事情,非要在这一次请求中全部完成么?值得用户浪费时间等你处理这些对他来说无关紧要的事情么?所以实际当第一步做完后,服务端就可以把其他的操作放入对应的消息队列中然后马上返回用户结果,由消息队列异步的进行这些操作。
或者还有一种情况,同时有大量用户注册你的软件,再高并发情况*册请求开始出现一些问题,例如邮件接口承受不住,或是分析信息时的大量计算使cpu满载,这将会出现虽然用户数据记录很快的添加到数据库中了,但是却卡在发邮件或分析信息时的情况,导致请求的响应时间大幅增长,甚至出现超时,这就有点不划算了。面对这种情况一般也是将这些操作放入消息队列(生产者消费者模型),消息队列慢慢的进行处理,同时可以很快的完成注册请求,不会影响用户使用其他功能。
所以在软件的正常功能开发中,并不需要去刻意的寻找消息队列的使用场景,而是当出现性能瓶颈时,去查看业务逻辑是否存在可以异步处理的耗时操作,如果存在的话便可以引入消息队列来解决。否则盲目的使用消息队列可能会增加维护和开发的成本却无法得到可观的性能提升,那就得不偿失了。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# Java消息队列
# java
# 消息队列实例
# 消息队列java代码实现
# java中栈和队列的实现和API的用法(详解)
# Java 队列实现原理及简单实现代码
# java实现消息队列的两种方式(小结)
# java队列实现方法(顺序队列
# 链式队列
# 循环队列)
# Java中常见队列举例详解(非线程安全)
# 服务端
# 给你
# 其他的
# 句话
# 数据库中
# 响应时间
# 自己的
# 的人
# 是一个
# 伊凡
# 也不
# 互联网
# 让我
# 让人
# 那就
# 在这
# 不需要
# 对他
# 互动
# 可以用
相关文章:
网站制作模板下载什么软件,ppt模板免费下载网站?
建站VPS推荐:2025年高性能服务器配置指南
如何在阿里云部署织梦网站?
如何在阿里云ECS服务器部署织梦CMS网站?
如何配置FTP站点权限与安全设置?
如何在IIS7上新建站点并设置安全权限?
如何通过建站之星自助学习解决操作问题?
宝塔建站后网页无法访问如何解决?
建站之星安装提示数据库无法连接如何解决?
广东专业制作网站有哪些,广东省能源集团有限公司官网?
企业网站制作费用多少,企业网站空间一般需要多大,费用是多少?
Python多线程使用规范_线程安全解析【教程】
浙江网站制作公司有哪些,浙江栢塑信息技术有限公司定制网站做的怎么样?
陕西网站制作公司有哪些,陕西凌云电器有限公司官网?
长春网站建设制作公司,长春的网络公司怎么样主要是能做网站的?
赚钱网站制作软件,建一个网站怎样才能赚钱?是如何盈利的?
厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?
Python路径拼接规范_跨平台处理说明【指导】
如何用IIS7快速搭建并优化网站站点?
免费网站制作appp,免费制作app哪个平台好?
股票网站制作软件,网上股票怎么开户?
学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?
,想在网上投简历,哪几个网站比较好?
深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?
宝塔新建站点为何无法访问?如何排查?
,网站推广常用方法?
如何选择适合PHP云建站的开源框架?
制作旅游网站html,怎样注册旅游网站?
网站制作公司排行榜,抖音怎样做个人官方网站
北京网站制作的公司有哪些,北京白云观官方网站?
建站之星如何快速生成多端适配网站?
如何用美橙互联一键搭建多站合一网站?
c# 服务器GC和工作站GC的区别和设置
专业的网站制作设计是什么,如何制作一个企业网站,建设网站的基本步骤有哪些?
网站规划与制作是什么,电子商务网站系统规划的内容及步骤是什么?
制作公司内部网站有哪些,内网如何建网站?
如何快速搭建高效服务器建站系统?
制作表格网站有哪些,线上表格怎么弄?
如何在Tomcat中配置并部署网站项目?
设计网站制作公司有哪些,制作网页教程?
平台云上自主建站:模板化设计与智能工具打造高效网站
如何快速上传自定义模板至建站之星?
广州建站公司哪家好?十大优质服务商推荐
山东网站制作公司有哪些,山东大源集团官网?
如何构建满足综合性能需求的优质建站方案?
南宁网站建设制作定制,南宁网站建设可以定制吗?
专业商城网站制作公司有哪些,pi商城官网是哪个?
正规网站制作公司有哪些,目前国内哪家网页网站制作设计公司比较专业靠谱?口碑好?
如何在Golang中处理模块冲突_解决依赖版本不兼容问题
如何在Golang中使用encoding/gob序列化对象_存储和传输数据
*请认真填写需求信息,我们会在24小时内与您取得联系。