diff --git a/README.md b/README.md index 621b49f..7b7a496 100644 --- a/README.md +++ b/README.md @@ -83,7 +83,10 @@ * arguments - Строка - [НЕОБЯЗАТЕЛЬНЫЙ] произвольные свойства в формате Json-объект. Пример: `{"x-message-ttl": 60000}`. Документация: https://www.rabbitmq.com/queues.html#optional-arguments Возвращаемое значение: - - Имя очереди, заданное явно в 1-м параметре. + - Строка - информация об очереди в формате объекта json. Пример: `{"name": "my-queue", "messageCount": 10, "consumerCount": 0}`, где: + * name - Имя очереди, заданное явно в 1-м параметре + * messageCount - Количество сообщений в очереди + * consumerCount - Количество подключенных к очереди потребителей сообщений. DeleteQueue - Удаляет очередь с сервера diff --git a/src/RabbitMQClient.cpp b/src/RabbitMQClient.cpp index 27a5fff..bfec1f8 100644 --- a/src/RabbitMQClient.cpp +++ b/src/RabbitMQClient.cpp @@ -123,14 +123,20 @@ void RabbitMQClient::declareQueueImpl(Biterp::CallContext& ctx) { string propsJson = ctx.stringParamUtf8(); AMQP::Table args = headersFromJson(propsJson); + string result; if (maxPriority != 0) { args.set("x-max-priority", maxPriority); } { connection->channel() ->declareQueue(name, (onlyCheckIfExists ? AMQP::passive : 0) | (durable ? AMQP::durable : 0) | (exclusive ? AMQP::exclusive : 0) | (autodelete ? AMQP::autodelete : 0), args) - .onSuccess([this]() + .onSuccess([this, &result](const std::string& name, uint64_t messageCount, uint64_t consumerCount) { + json queueInfo = json::object(); + queueInfo["name"] = name; + queueInfo["messageCount"] = messageCount; + queueInfo["consumerCount"] = consumerCount; + result = queueInfo.dump(); connection->loopbreak(); }) .onError([this](const char* message) @@ -139,7 +145,7 @@ void RabbitMQClient::declareQueueImpl(Biterp::CallContext& ctx) { }); } connection->loop(); - ctx.setStringResult(u16Converter.from_bytes(name)); + ctx.setStringResult(u16Converter.from_bytes(result)); }