介绍
合理利用消息队列可以有效解决应用程序处理速度和异步线程问题。
此案例为点对点消息队列模式(多个生产者,一个消费者)
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_;
};
创建消息队列类

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

入队操作

出队操作

需要确认型号或具体项目?联系技术支持 ↗