Java消息队列的简单实现代码
发布时间 - 2026-01-11 02:29:04 点击率:次今天看到我们的招聘信息有对消息队列有要求,然后就思索了一翻,网上一搜一大堆。
我可以举个小例子先说明应用场景
假设你的服务器每分钟的处理量为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中常见队列举例详解(非线程安全)
# 服务端
# 给你
# 其他的
# 句话
# 数据库中
# 响应时间
# 自己的
# 的人
# 是一个
# 伊凡
# 也不
# 互联网
# 让我
# 让人
# 那就
# 在这
# 不需要
# 对他
# 互动
# 可以用
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
详解jQuery停止动画——stop()方法的使用
合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?
微信小程序 require机制详解及实例代码
简历没回改:利用AI润色让你的文字更专业
Laravel辅助函数有哪些_Laravel Helpers常用助手函数大全
网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?
如何在万网自助建站中设置域名及备案?
Laravel怎么实现一对多关联查询_Laravel Eloquent模型关系定义与预加载【实战】
如何注册花生壳免费域名并搭建个人网站?
详解Nginx + Tomcat 反向代理 如何在高效的在一台服务器部署多个站点
PHP正则匹配日期和时间(时间戳转换)的实例代码
Laravel如何清理系统缓存命令_Laravel清除路由配置及视图缓存的方法【总结】
如何快速搭建安全的FTP站点?
如何为不同团队 ID 动态生成多个“认领值班”按钮
Python3.6正式版新特性预览
Laravel Session怎么存储_Laravel Session驱动配置详解
香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧
laravel怎么为应用开启和关闭维护模式_laravel应用维护模式开启与关闭方法
laravel怎么用DB facade执行原生SQL查询_laravel DB facade原生SQL执行方法
Laravel如何操作JSON类型的数据库字段?(Eloquent示例)
Laravel Asset编译怎么配置_Laravel Vite前端构建工具使用
Python文件操作最佳实践_稳定性说明【指导】
广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?
Midjourney怎么调整光影效果_Midjourney光影调整方法【指南】
如何用PHP快速搭建CMS系统?
Laravel全局作用域是什么_Laravel Eloquent Global Scopes应用指南
Win11怎么查看显卡温度 Win11任务管理器查看GPU温度【技巧】
如何在VPS电脑上快速搭建网站?
WordPress 子目录安装中正确处理脚本路径的完整指南
手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?
百度输入法全感官ai怎么关 百度输入法全感官皮肤关闭
在线制作视频网站免费,都有哪些好的动漫网站?
javascript如何操作浏览器历史记录_怎样实现无刷新导航
微信小程序 canvas开发实例及注意事项
如何在云服务器上快速搭建个人网站?
HTML 中如何正确使用模板变量为元素的 name 属性赋值
如何在服务器上配置二级域名建站?
Laravel如何集成第三方登录_Laravel Socialite实现微信QQ微博登录
如何在 Telegram Web View(iOS)中防止键盘遮挡底部输入框
网站建设要注意的标准 促进网站用户好感度!
无锡营销型网站制作公司,无锡网选车牌流程?
如何用AI帮你把自己的生活经历写成一个有趣的故事?
怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?
移动端脚本框架Hammer.js
Laravel项目如何进行性能优化_Laravel应用性能分析与优化技巧大全
网站制作企业,网站的banner和导航栏是指什么?
Windows驱动无法加载错误解决方法_驱动签名验证失败处理步骤
如何安全更换建站之星模板并保留数据?
Laravel Docker环境搭建教程_Laravel Sail使用指南
Win11怎么恢复误删照片_Win11数据恢复工具使用【推荐】

