redis引入未完成

This commit is contained in:
lnk
2026-06-24 16:37:32 +08:00
parent c221102a5a
commit ae911b46e5
10 changed files with 1312 additions and 42 deletions

View File

@@ -43,6 +43,10 @@
#include "../log4cplus/log4.h"//lnk添加log4
//添加redis stream相关头文件
#include "../redisstream/RedisStreamMQ.h"
#include <QSettings>
using namespace std;
static std::once_flag g_consumer_once;
@@ -63,6 +67,11 @@ extern std::string G_MQCONSUMER_TOPIC_RT;
extern std::string G_MQCONSUMER_TOPIC_TEST;
//消费者连接秘钥
extern std::string G_MQCONSUMER_ACCESSKEY;
extern std::string G_MQCONSUMER_SECRETKEY;
extern std::string G_MQCONSUMER_CHANNEL;
extern std::string FRONT_INST;
extern bool DEBUGOPEN;
@@ -80,10 +89,9 @@ extern int g_front_seg_index;
extern char subdir[128];
////////////////////////////////////////////////////////////////////////////////////////////////////////////
//消费者连接秘钥
extern std::string G_MQCONSUMER_ACCESSKEY;
extern std::string G_MQCONSUMER_SECRETKEY;
extern std::string G_MQCONSUMER_CHANNEL;
extern int G_MQ_BACKEND;
////////////////////////////////////////////////////////////////////////////////////////////////////////
// 前向声明 RocketMQConsumer 类
class RocketMQConsumer;
@@ -102,11 +110,23 @@ int64_t G_APP_START_MS = []() -> int64_t {
int64_t G_START_SKEW_MS = 1000;
bool should_process_after_start(const rocketmq::MQMessageExt& msg)
bool RocketMQ_should_process_after_start(const rocketmq::MQMessageExt& msg)
{
const int64_t born_ts = static_cast<int64_t>(msg.getBornTimestamp());
return born_ts >= (G_APP_START_MS - G_START_SKEW_MS);
}
bool should_process_after_start(const rocketmq::MQMessageExt& msg)
{
if (G_MQ_BACKEND == MQ_BACKEND_REDIS_STREAM)
{
return RedisStream_should_process_after_start(msg);
}
else
{
return RocketMQ_should_process_after_start(msg);
}
}
///////////////////////////////
class InternalListener;
@@ -419,7 +439,7 @@ void RocketMQConsumer::setConsumerMessageModel(const std::string& topic)
RocketMQConsumer* g_consumer = NULL;
// 初始化消费者函数
void InitializeConsumer(
void RocketMQ_InitializeConsumer(
const std::string& consumerName,
const std::string& nameServer,
const std::vector<Subscription>& subscriptions) // 接收多个订阅
@@ -446,7 +466,7 @@ void InitializeConsumer(
}
// 关闭并销毁消费者函数
void ShutdownAndDestroyConsumer()
void RocketMQ_ShutdownAndDestroyConsumer()
{
if (g_consumer != NULL) {
delete g_consumer;
@@ -455,7 +475,7 @@ void ShutdownAndDestroyConsumer()
}
// 消费消息的接口函数
void rocketmq_consumer_receive(
void RocketMQ_rocketmq_consumer_receive(
const std::string& consumerName,
const std::string& nameServer,
const std::vector<Subscription>& subscriptions) // 接收多个订阅
@@ -844,7 +864,7 @@ private:
RocketMQProducer* g_producer = NULL;
// 初始化生产者(在程序启动时调用一次)
void InitializeProducer()
void RocketMQ_InitializeProducer()
{
if (g_producer == NULL) {
try {
@@ -859,7 +879,7 @@ void InitializeProducer()
}
// 关闭并销毁生产者(在程序结束时调用一次)
void ShutdownAndDestroyProducer()
void RocketMQ_ShutdownAndDestroyProducer()
{
if (g_producer != NULL) {
delete g_producer;
@@ -868,7 +888,7 @@ void ShutdownAndDestroyProducer()
}
// 发送消息的接口函数
void rocketmq_producer_send(const std::string& body,
void RocketMQ_rocketmq_producer_send(const std::string& body,
const std::string& topic,
const std::string& tags,
const std::string& keys)
@@ -887,7 +907,102 @@ void rocketmq_producer_send(const std::string& body,
}
}
#endif
/////////////////////////////////////////////////////////////////////////////////////////////////////////生产者消费者切换
void InitializeProducer()
{
if (G_MQ_BACKEND == MQ_BACKEND_REDIS_STREAM)
{
RedisStream_InitializeProducer();
return;
}
RocketMQ_InitializeProducer();
}
void ShutdownAndDestroyProducer()
{
if (G_MQ_BACKEND == MQ_BACKEND_REDIS_STREAM)
{
RedisStream_ShutdownAndDestroyProducer();
return;
}
RocketMQ_ShutdownAndDestroyProducer();
}
void rocketmq_producer_send(const std::string& body,
const std::string& topic,
const std::string& tags,
const std::string& keys)
{
if (G_MQ_BACKEND == MQ_BACKEND_REDIS_STREAM)
{
RedisStream_producer_send(
body,
topic,
tags,
keys
);
return;
}
RocketMQ_rocketmq_producer_send(
body,
topic,
tags,
keys
);
}
void InitializeConsumer(
const std::string& consumerName,
const std::string& nameServer,
const std::vector<Subscription>& subscriptions)
{
if (G_MQ_BACKEND == MQ_BACKEND_REDIS_STREAM)
{
RedisStream_InitializeConsumer(
consumerName,
nameServer,
subscriptions
);
return;
}
RocketMQ_InitializeConsumer(
consumerName,
nameServer,
subscriptions
);
}
void ShutdownAndDestroyConsumer()
{
if (G_MQ_BACKEND == MQ_BACKEND_REDIS_STREAM)
{
RedisStream_ShutdownAndDestroyConsumer();
return;
}
RocketMQ_ShutdownAndDestroyConsumer();
}
void rocketmq_consumer_receive(
const std::string& consumerName,
const std::string& nameServer,
const std::vector<Subscription>& subscriptions)
{
if (G_MQ_BACKEND == MQ_BACKEND_REDIS_STREAM)
{
RedisStream_consumer_receive(
consumerName,
nameServer,
subscriptions
);
return;
}
RocketMQ_rocketmq_consumer_receive(
consumerName,
nameServer,
subscriptions
);
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////
/*
// producer_send0测试用

View File

@@ -376,6 +376,9 @@ int G_LOG_RATE_KEEP_BURST_MS = 1000; // 间隔 >= 1000ms按二级策略
int G_LOG_RATE_KEEP_BURST_COUNT = 60; // 二级保留前60条
int G_LOG_RATE_KEEP_HIGHFREQ_COUNT = 10; // 高频保留前10条
//添加底层队列开关
int G_MQ_BACKEND = 0; // 0-默认RocketMQ1-Redis Stream
//lnk20250115添加台账锁
extern pthread_mutex_t mtx;
@@ -649,6 +652,20 @@ void init_config() {
qDebug() << "Read UDS_DOWNLOAD_URL:" << UDS_DOWNLOAD_URL << endl;
/*添加rocketmq的解析10-9 */////////////////////////////////////////////////////////////////
ba = settings.value("RocketMq/Backend", "rocketmq").toString().toLatin1();
std::string mq_backend = ba.data();
if (mq_backend == "redis" || mq_backend == "redisstream" || mq_backend == "1") {
G_MQ_BACKEND = MQ_BACKEND_REDIS_STREAM;
} else {
G_MQ_BACKEND = MQ_BACKEND_ROCKETMQ;
}
std::cout << "Read RocketMq/Backend:" << mq_backend
<< ", G_MQ_BACKEND:" << G_MQ_BACKEND
<< std::endl;
//生产者
ba = settings.value("RocketMq/producer", "").toString().toLatin1();
G_ROCKETMQ_PRODUCER = strdup(ba.data());