消息中间件

Efficient work, excellent efficiency。
talk is cheap, show me the code,make a better result.

目录

在这里插入图片描述

概述

首先我们先考虑Spring,其中最重要的就是AOP。

需求:

需求整理如下:
1.消息消费。
2消息监听等机制

设计思路

暂无

实现思路分析

1. 创建一个装队列的容器

2.创建一个计数器

3.筛选出匹配容器管理类的切面aspectlist //创建容器的最大值和最小值

拓展Demo实现

相关代码如下:

1.定义默认切面类

ublic class MyQueue1 {
    //创建一个装队列的容器
    private LinkedList<Object> list = new LinkedList<>();
    //创建一个计数器
    private AtomicInteger count = new AtomicInteger(0);
    //创建容器的最大值和最小值
    private final int minSize = 0;
    
    private final int maxSize ;
    
    public MyQueue1(int size){
        this.maxSize = size;
    }
    
    private final Object lock = new Object();
    
    public void put(Object obj){
        synchronized (lock) {
            if (count.get() == this.maxSize) {
                try {
                    lock.wait();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            //把对象加入容器
            list.add(obj);
            //计算容器的数值
            count.incrementAndGet();
            //唤醒等待的线程
            lock.notify();
            System.out.println("新加入的元素为:" + obj);
        }
    }
    
    public Object take(){
        Object ret =null;
        synchronized (lock) {
            if (count.get() == this.minSize) {
                try {
                    lock.wait();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            ret = list.removeFirst();
            count.decrementAndGet();
            lock.notify();
        }
        
        return ret;
    }
    
    
    public int Size(){
        return this.count.get();
    }
    
    public static void main(String[] args) {
        final MyQueue1 mq = new MyQueue1(5);
        mq.put(1);
        mq.put(2);    
        mq.put(3);    
        mq.put(4);    
        mq.put(5);    
        
        System.out.println("当前容器的长度:" + mq.Size());
        
        Thread t1 = new Thread(new Runnable() {
            @Override
            public void run() {
                mq.put(6);
                mq.put(7);    
            }
        },"t1");
        
        t1.start();
        
        try {
            TimeUnit.SECONDS.sleep(2);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        Thread t2 = new Thread(new Runnable() {
            @Override
            public void run() {
                Object o1 = mq.take();
                System.out.println("移除的元素为:" + o1);
                Object o2 = mq.take();
                System.out.println("移除的元素为:" + o2);
            }
        },"t2");
        t2.start();
        
    }
}
 

实验效果:

分析:

待补充

小结:

主要讲述了消息原理和简单实现,里面有许多不足,请大家指正~

参考资料和推荐阅读

  1. 如何设计实现一个消息队列.
  2. 阿里大牛纯手写RabbitMQ 笔记.
  3. 手写一个简单的MQ消息队列.

欢迎阅读,各位老铁,如果对你有帮助,点个赞加个关注呗!~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

执于代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值