今天看到我们的招聘信息有对消息队列有要求,然后就思索了一翻,网上一搜一大堆。
我可以举个小例子先说明应用场景
假设你的服务器每分钟的处理量为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中常见队列举例详解(非线程安全)
# 服务端
# 给你
# 其他的
# 句话
# 数据库中
# 响应时间
# 自己的
# 的人
# 是一个
# 伊凡
# 也不
# 互联网
# 让我
# 让人
# 那就
# 在这
# 不需要
# 对他
# 互动
# 可以用
相关文章:
大学网站设计制作软件有哪些,如何将网站制作成自己app?
如何快速搭建高效WAP手机网站?
建站主机选择指南:服务器配置与SEO优化实战技巧
建站之星北京办公室:智能建站系统与小程序生成方案解析
网站制作专业公司有哪些,如何制作一个企业网站,建设网站的基本步骤有哪些?
极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?
建站之星免费模板:自助建站系统与智能响应式一键生成
c# Task.ConfigureAwait(true) 在什么场景下是必须的
专业网站建设制作报价,网页设计制作要考什么证?
高端云建站费用究竟需要多少预算?
如何注册花生壳免费域名并搭建个人网站?
合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?
装修招标网站设计制作流程,装修招标流程?
自助网站制作软件,个人如何自助建网站?
学校免费自助建站系统:智能生成+拖拽设计+多端适配
网站制作培训多少钱一个月,网站优化seo培训课程有哪些?
如何快速生成高效建站系统源代码?
c++ stringstream用法详解_c++字符串与数字转换利器
移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?
如何通过虚拟主机空间快速建站?
h5网站制作工具有哪些,h5页面制作工具有哪些?
表情包在线制作网站免费,表情包怎么弄?
百度网页制作网站有哪些,谁能告诉我百度网站是怎么联系?
网站制作需要会哪些技术,建立一个网站要花费多少?
太平洋网站制作公司,网络用语太平洋是什么意思?
零基础网站服务器架设实战:轻量应用与域名解析配置指南
微信网站制作公司有哪些,民生银行办理公司开户怎么在微信网页上查询进度?
枣阳网站制作,阳新火车站打的到仙岛湖多少钱?
网站设计制作公司地址,网站建设比较好的公司都有哪些?
如何基于云服务器快速搭建网站及云盘系统?
宝华建站服务条款解析:五站合一功能与SEO优化设置指南
定制建站模板如何实现SEO优化与智能系统配置?18字教程
如何通过远程VPS快速搭建个人网站?
建站之星如何防范黑客攻击与数据泄露?
建站VPS选购需注意哪些关键参数?
如何选择CMS系统实现快速建站与SEO优化?
如何通过wdcp面板快速创建网站?
小型网站制作HTML,*游戏网站怎么搭建?
网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?
如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?
建站之星免费版是否永久可用?
宝塔新建站点报错如何解决?
,sp开头的版面叫什么?
网站设计制作企业有哪些,抖音官网主页怎么设置?
如何选择高效便捷的WAP商城建站系统?
活动邀请函制作网站有哪些,活动邀请函文案?
动图在线制作网站有哪些,滑动动图图集怎么做?
javascript基本数据类型及类型检测常用方法小结
小捣蛋自助建站系统:数据分析与安全设置双核驱动网站优化
制作网站的过程怎么写,用凡科建站如何制作自己的网站?
*请认真填写需求信息,我们会在24小时内与您取得联系。