【回调消息解决方案】Java手写一个简单的消息存储队列用以存储需要推送的实时数据

本文探讨如何在Java中创建一个消息存储队列,用于处理回调中的实时数据。通过链表实现队列,保证原子性,以解决多线程环境下消息存储的问题。随着需求变化,进一步优化为使用Map存储不同队列,支持实时消息推送。
摘要由CSDN通过智能技术生成

一、问题背景

有这种场景:当某一些消息由服务器发送到后台时,往往是在一个回调函数中获取。我们如何从回调函数中获取它并可以由不同的个体创建不同的队列,再将实时获取的消息推送出去呢?

二、方案雏形

一般来说,我们用一个队列存储取得的回调消息,然后在其他我们需要的地方从这个队列中取出消息,由此可以知道需要这么做:
1、这个队列由于经常增减,应该是链表形式的
2、这个队列应该只有一个实例,这样才能在其他地方取出消息
3、当存在多条消息同时向队列存入的情况时,它应该保持原子性

以下代码来自这篇博客:https://blog.csdn.net/weixin_40035204/article/details/80094352?utm_source=blogxgwz2
由此我们可以用以下这种方式解决:

/**
 * @author LiHang
 * @date 2020-09-08
 * @description 用于存储消息的缓存队列,可将mqtt回调类的消息传递给用户
 */
public class MessageQueue {
   

    private static final Logger log = LoggerFactory.getLogger(MessageQueue.class);

    private LinkedList<String> list = new LinkedList<String>();
    private int size = 0;
    private static MessageQueue instance;

    /**
     * 初始化方法,确保只存在一个类实例
     */
    public static synchronized MessageQueue getInstance(){
   
        if (instance == null){
   
            instance = new MessageQueue();
        }
        return instance;
    }

    /**
     * 添加一条
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值