转载:http://blog.csdn.net/u012260707/article/details/50476475
今天看到我们的招聘信息有对消息队列有要求,然后就思索了一翻,网上一搜一大堆。
我可以举个小例子先说明应用场景
假设你的服务器每分钟的处理量为200个,但客户端再峰值的时候可能一分钟会发1000个消息给你,这时候你就可以把他做成队列,然后按正常有序的处理,先进后出(LIFO),先进先出(FIFO)可根据自己的情况进行定夺
stack 先进后出(LIFO)-------- 对应的类 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来作弊,学以致用
消息队列的应用场景,补充(来自互联网)
个人认为消息队列的主要特点是异步处理,主要目的是减少请求响应时间和解耦。所以主要的使用场景就是将比较耗时而且不需要即时(同步)返回结果的操作作为消息放入消息队列。同时由于使用了消息队列,只要保证消息格式不变,消息的发送方和接收方并不需要彼此联系,也不需要受对方的影响,即解耦和。 使用场景的话,举个例子: 假设用户在你的软件中注册,服务端收到用户的注册请求后,它会做这些操作:
- 校验用户名等信息,如果没问题会在数据库中添加一个用户记录
- 如果是用邮箱注册会给你发送一封注册成功的邮件,手机注册则会发送一条短信
- 分析用户的个人信息,以便将来向他推荐一些志同道合的人,或向那些人推荐他
- 发送给用户一个包含操作指南的系统通知
- 等等……