laizi :http://blog.csdn.net/u012260707/article/details/50476475

今天看到我们的招聘信息有对消息队列有要求,然后就思索了一翻,网上一搜一大堆。

我可以举个小例子先说明应用场景

假设你的服务器每分钟的处理量为200个,但客户端再峰值的时候可能一分钟会发1000个消息给你,这时候你就可以把他做成队列,然后按正常有序的处理,先进后出(LIFO),先进先出(FIFO)可根据自己的情况进行定夺

stack  先进后出(LIFO)--------Java 对应的类 Stack

队列 先进先出(FIFO)--------java对应的类Queue

这两种都可用Linkedlist进行封装和实现,下面是我自己写的一个栈的例子

[java] view plaincopy
  1. /**
  2. * @author 刘伊凡
  3. * --------->>>>>>队列的实现--------------
  4. */
  5. public class MyStack<T> {
  6. private LinkedList<T> storage = new LinkedList<T>();
  7. public synchronized void push(T e) {//需要加上同步
  8. storage.addFirst(e);
  9. }
  10. public T peek() {
  11. return storage.getFirst();
  12. }
  13. public void pop() {
  14. storage.removeFirst();
  15. }
  16. public boolean empty() {
  17. return storage.isEmpty();
  18. }
  19. @Override
  20. public String toString() {
  21. return storage.toString();
  22. }
  23. }

下面是一个测试类

[java] view plaincopy
  1. /**
  2. * @author 刘伊凡
  3. *
  4. */
  5. public class StackTest {
  6. public static void main(String[] args) {
  7. MyStack<String> stack = new MyStack<String>();
  8. for(String s : "the prefect code".split(" ")){//LIFO
  9. stack.push(s);
  10. }
  11. while(!stack.empty()){
  12. System.out.print(stack.peek()+" ");
  13. stack.pop();
  14. }
  15. System.out.println();
  16. for(char s : "写了个一句话倒起来说的程序".toCharArray()){//用例:正话反说
  17. stack.push(String.valueOf(s));
  18. }
  19. while(!stack.empty()){
  20. System.out.print(stack.peek());
  21. stack.pop();
  22. }
  23. }
  24. }

挺有意思的,让我想了,以前在学校的晚会上,主持人互动的时候会让人上台去答题拿奖品,其中有一个题目就是主持人说一句话,然后要求选手倒起来说,我们的这个程序很符合需求嘛,哈哈,我们可以用java来作弊,学以致用

消息队列的应用场景,补充(来自互联网)

个人认为消息队列的主要特点是异步处理,主要目的是减少请求响应时间和解耦。所以主要的使用场景就是将比较耗时而且不需要即时(同步)返回结果的操作作为消息放入消息队列。同时由于使用了消息队列,只要保证消息格式不变,消息的发送方和接收方并不需要彼此联系,也不需要受对方的影响,即解耦和。

使用场景的话,举个例子:
假设用户在你的软件中注册,服务端收到用户的注册请求后,它会做这些操作:

  1. 校验用户名等信息,如果没问题会在数据库中添加一个用户记录
  2. 如果是用邮箱注册会给你发送一封注册成功的邮件,手机注册则会发送一条短信
  3. 分析用户的个人信息,以便将来向他推荐一些志同道合的人,或向那些人推荐他
  4. 发送给用户一个包含操作指南的系统通知
  5. 等等……

但是对于用户来说,注册功能实际只需要第一步,只要服务端将他的账户信息存到数据库中他便可以登录上去做他想做的事情了。至于其他的事情,非要在这一次请求中全部完成么?值得用户浪费时间等你处理这些对他来说无关紧要的事情么?所以实际当第一步做完后,服务端就可以把其他的操作放入对应的消息队列中然后马上返回用户结果,由消息队列异步的进行这些操作。

或者还有一种情况,同时有大量用户注册你的软件,再高并发情况下注册请求开始出现一些问题,例如邮件接口承受不住,或是分析信息时的大量计算使cpu满载,这将会出现虽然用户数据记录很快的添加到数据库中了,但是却卡在发邮件或分析信息时的情况,导致请求的响应时间大幅增长,甚至出现超时,这就有点不划算了。面对这种情况一般也是将这些操作放入消息队列(生产者消费者模型),消息队列慢慢的进行处理,同时可以很快的完成注册请求,不会影响用户使用其他功能。

所以在软件的正常功能开发中,并不需要去刻意的寻找消息队列的使用场景,而是当出现性能瓶颈时,去查看业务逻辑是否存在可以异步处理的耗时操作,如果存在的话便可以引入消息队列来解决。否则盲目的使用消息队列可能会增加维护和开发的成本却无法得到可观的性能提升,那就得不偿失了。

JAVA 消息队列的使用场景相关推荐

  1. 消息队列的使用场景_消息队列MQ的特点、选型及应用场景

    一.什么是消息队列 消息队列(Message Queue,简称MQ),指保存消息的一个容器,本质是个队列. 消息(Message)是指在应用之间传送的数据,消息可以非常简单,比如只包含文本字符串,也可 ...

  2. 消息队列的使用场景和使用技巧

    2019独角兽企业重金招聘Python工程师标准>>> 一.消息队列的使用场景 1.应用解耦 假设商品和结算和支付是不同的系统,两个系统之间的通讯可以通过消息队列完成,不需要强制性的 ...

  3. Java 消息队列、缓存、同步(个人理解:空谈)

    Java 消息队列.缓存.同步. 消息队列 我的理解:消息队列,将消息存入消息队列,然后就OK了. 系统之间原先调用通用接口,但引入了消息队列后,系统之间调用MQ消息队列. 好处:响应快,能累积请求, ...

  4. 消息队列的使用场景是什么样的?

    本文从异步.解耦.削峰填谷等核心应用场景,以及消息中间件常用协议.推拉模式对比来解答此问题. 什么是消息中间件 作为一种典型的消息代理组件(Message Broker),是企业级应用系统中常用的消息 ...

  5. 面试官:说出八种消息队列的应用场景。啊?八种?

    本文来源于公众号:胖滚猪学编程.转载请注明出处! 一个风度翩翩,穿着格子衬衣的中年男子,拿着一个满是划痕的mac向她走来,看着铮亮的头,胖滚猪心想,这肯定是尼玛顶级架构师吧!完了要挂了. 结果面试官第 ...

  6. Java消息队列-Spring整合ActiveMq

    1.概述 首先和大家一起回顾一下Java 消息服务,在我之前的博客<Java消息队列-JMS概述>中,我为大家分析了: 消息服务:一个中间件,用于解决两个或多个程序之间的耦合,底层由Jav ...

  7. java 消息队列详解_Java消息队列-Spring整合ActiveMq的详解

    本篇文章主要介绍了详解Java消息队列-Spring整合ActiveMq ,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧 1.概述 首先和大家一起回顾一下Java 消息服 ...

  8. Java消息队列总结只需一篇解决ActiveMQ、RabbitMQ、ZeroMQ、Kafka

    一.消息队列概述 消息队列中间件是分布式系统中重要的组件,主要解决应用解耦,异步消息,流量削锋等问题,实现高性能,高可用,可伸缩和最终一致性架构.目前使用较多的消息队列有ActiveMQ,Rabbit ...

  9. java 消息队列服务_ActiveMQ 消息队列服务

    1 ActiveMQ简介 1.1 ActiveMQ是什么 ActiveMQ是一个消息队列应用服务器(推送服务器).支持JMS规范. 1.1.1 JMS概述 全称:Java Message Servic ...

最新文章

  1. [翻译]ASP.NET MVC 3 开发的20个秘诀(十二)[20 Recipes for Programming MVC 3]:缩放图片尺寸创建缩略图...
  2. recv java_用于TCP套接字编程的Recv函数
  3. Python的内置方法(二)
  4. 【错误记录】Android NDK 错误排查记录 ( error: undefined reference to | Linking CXX shared library FAILED )
  5. 插入最快mysql8.0_MySQL8.0大表秒加字段,是真的吗?
  6. [知识图谱实战篇] 六.HTML+D3实现点击节点显示相关属性及属性值
  7. 使用SpringBoot搭建一个简单的webSocket服务
  8. 学术科普 | 漫威电影中的智能大脑
  9. C程序设计语言现代方法15:编写大型程序
  10. 提取过程_上海生物发酵展浅谈中药提取分离的现状
  11. Python星号表达式
  12. ASP.NET开发学习视频教程大全(共800集)
  13. Abaqus运行fortan报错:“Error in job Job-1: Problem during compilation - D:\test.for”
  14. linux qt 多点触摸,Qt 4.6 添加 Multi-touch(多点触摸)支持
  15. 新浪云python示例_在新浪云安装Python应用
  16. JS题目之数组数据拆分重组转成嵌套对象,让脑细胞活跃下
  17. C语言Hello world代码
  18. python实现注册功能_python注册、登录,python注册登录,#1、实现注册功能#
  19. 利用文本编辑器判断dll/exe是否为64位
  20. Tableau绘图一热图、日历图、人口金字塔、标靶图、凹凸图、帕累托图

热门文章

  1. 使用dreamweaver制作采用DIV+CSS进行布局——美食甜品店铺加盟企业HTML静态网页 ——学生美食网页设计作品静态HTML网页模板源码
  2. 基于51单片机的篮球赛计时计分器(仿真+源程序+原理图+PCB+论文)
  3. 山东大学软件学院项目实训-创新实训-山大软院网络攻防靶场实验平台(三)
  4. 怎么区分zh和ch_怎样区分zhchsh与zcs
  5. 在网页上嵌入微博--微博秀
  6. 快递物流查询,分析派件时效,查找正在派件的单号
  7. ruby on rails validates uniqueness
  8. 带轮轮毂长度l和带轮宽b表_B型V带轮的轮缘宽B_轮毂孔径D和轮毂长L.doc
  9. 2021qq匿名说说在哪里
  10. OpenGL 4 : 一个漂亮的心 For you, My Love