ActiveMQ-CPP -消息重新传递延迟没有得到应用
ActiveMQ-CPP - message redelivery delay do not get applied
我使用ActiveMQ-CPP 3.4.5从c++程序连接到消息代理。我遇到的问题与退货政策有关。返回到队列的消息将立即重新传递。这不是我所期望的行为。我希望这些信息能在一段时间后得到回复
通过重新发送策略设置的时间。这是一个代码片段,显示了我设置再投递策略的方式:
policy = new activemq::core::policies::DefaultRedeliveryPolicy();
policy->setInitialRedeliveryDelay(0);
policy->setRedeliveryDelay(10000);
policy->setMaximumRedeliveries((int)activemq::core::RedeliveryPolicy::NO_MAXIMUM_REDELIVERIES);
connectionFactory.setRedeliveryPolicy(policy);
正如我之前所说的,我希望在10000毫秒后重新发送消息,但事实并非如此。他们会立即回到消费者那里。
有谁知道这种行为的原因是什么吗?您将初始延迟设置为零,以便在事务第一次回滚时立即重新交付它们。如果你想让它们在第一个重发周期被延迟,那么你需要将初始延迟设置为10000。
当我查看ActiveMQ-CPP源代码时,我在ActiveMQConsumer.cpp文件中发现了以下代码片段:
if( internal->redeliveryDelay > 0 && !this->internal->unconsumedMessages->isClosed() ) {
// TODO - Can't do this until we can control object lifetime.
// Start up the delivery again a little later.
// this->internal->scheduler->executeAfterDelay(
// new StartConsumerTask(this), internal->redeliveryDelay);
start();
} else {
start();
}
因此,似乎在回滚之后根本没有考虑redeliveryDelay。我想这就是为什么我的消息在回滚后立即到达的原因。
onMessage方法:
void BaseProdListener::onMessage( const cms::Message* message ){
log4cxx::Logger::getLogger("BaseProdListener")->info("onMessage");
_message = message;
try {
const cms::TextMessage* textMessage = dynamic_cast< const cms::TextMessage* >( message );
std::string text = "";
if( textMessage != NULL ) {
text = textMessage->getText();
log4cxx::Logger::getLogger("BaseProdListener")->debug("Received message:" + text);
handleMessage(text);
}
} catch (cms::CMSException& e){
log4cxx::Logger::getLogger("BaseProdListener")->error(e.getStackTraceString());
}
}
相关文章:
- 如何仅为一个函数添加延迟
- 试图在visual studio上用C++创建一个桌面应用程序
- FFmpeg:制作一个应用程序比直接使用ffmepg更好吗
- c++r值引用应用于函数指针
- 在C应用程序中运行C++(带有STL)函数
- Qt是否能够支持小缓冲区低延迟视频应用(例如实时流)
- 我的 SDL2 应用程序仅在第一次键盘输入后出现严重延迟
- WINDOWS环境下的c++opencv应用程序的低延迟视频流
- c++UDP中继应用程序延迟
- 重新启动应用程序:延迟
- 如何测量低延迟 c++ 应用程序的延迟
- 如何提高多线程应用程序的延迟
- 我的应用程序加载缓慢或延迟
- 在最坏的情况下,多少QPI延迟可以减慢任意应用程序的速度
- 如何在不停止应用程序的情况下延迟一个函数
- 如何度量在多核系统上运行的多个应用程序之间的消息延迟
- 设计问题:从低延迟的c++应用程序更新数据库
- ActiveMQ-CPP -消息重新传递延迟没有得到应用
- 网络延迟和应用程序>进程消息()
- UWP Windows 10 Direct3D 12 应用程序C++ KeyDown 延迟