菜单

消息队列案例(进阶篇)

下载

介绍

合理利用消息队列可以有效解决应用程序处理速度和异步线程问题。
此案例为点对点消息队列模式(多个生产者,一个消费者)

Producer: 消息生产者,负责产生和发送消息到Broker。

Broker: 消息处理中心,负责消息存储、确认、重试等,-般其中会包含多个Queue。

Consumer:消息消费者,负责从Broker中获取消息,并进行相应处理。

CPP 复制代码
#include <iostream>
#include <queue>
#include <mutex>
#include <condition_variable>
#include <thread>
//#include <optional>
#include <memory>

template <typename T>
class ConcurrentQueue {
public:
    ConcurrentQueue() = default;

    void Enqueue(const T& item) {
        std::lock_guard<std::mutex> lock(mutex_);
        queue_.push(item);
        cond_var_.notify_one(); 
    }

    std::unique_ptr<T> Dequeue() {
        std::unique_lock<std::mutex> lock(mutex_);
        cond_var_.wait(lock, [this]() { return !queue_.empty(); });
        T item = queue_.front();
        queue_.pop();
        return std::make_unique<T>(item);
    }

    bool IsEmpty() {
        std::lock_guard<std::mutex> lock(mutex_);
        return queue_.empty();
    }

    size_t Size() {
        std::lock_guard<std::mutex> lock(mutex_);
        return queue_.size();
    }

private:
    std::queue<T> queue_;
    mutable std::mutex mutex_;
    std::condition_variable cond_var_;
};

创建消息队列类

声明全局队列指针 构造消息队列

入队操作

出队操作

最近修改: 2025-04-02Powered by