amqp_consume_message now has a timeout

RabbitMQ::consume() will return an empty string if the call to amqp_consume_message times out
This commit is contained in:
Grant Limberg 2019-04-18 14:57:06 -07:00
parent 6014df2847
commit 6a027c9c0a
2 changed files with 17 additions and 2 deletions

View file

@ -80,9 +80,18 @@ std::string RabbitMQ::consume()
amqp_envelope_t envelope;
amqp_maybe_release_buffers(_conn);
res = amqp_consume_message(_conn, &envelope, NULL, 0);
struct timeval timeout;
timeout.tv_sec = 1;
timeout.tv_usec = 0;
res = amqp_consume_message(_conn, &envelope, &timeout, 0);
if (res.reply_type != AMQP_RESPONSE_NORMAL) {
throw std::runtime_error("Error getting message");
if (res.reply_type == AMQP_RESPONSE_LIBRARY_EXCEPTION && res.library_error == AMQP_STATUS_TIMEOUT) {
// timeout waiting for message. Return empty string
return "";
} else {
throw std::runtime_error("Error getting message");
}
}
std::string msg(