Ответ 1
С протоколом AMQP (включая реализацию RabbitMQ) вы не можете получить такую информацию со 100% гарантией.
Ближайшее число к числу сообщений - это количество сообщений, возвращенных с помощью queue.declare-ok
(AMQP.Queue.DeclareOk
в java-библиотеке AMQP).
В то время как количество сообщений, которое вы получаете с помощью queue.declare-ok
, может совпадать с точными номерами номеров сообщений, вы не можете полагаться на него, поскольку оно не подсчитывает сообщения, которые ожидают подтверждения или публикации в очереди во время транзакции, но еще не зафиксированы.
На самом деле это зависит от того, какая прецессия вам нужна.
Что касается объекта, о котором вы можете узнать, вы можете вручную извлечь все сообщения в очереди, просмотреть их тело и вернуть их в очередь. Это единственный способ сделать то, что вы хотите.
Вы можете получить некоторую информацию о количестве сообщений с помощью Плагин управления, RabbitMQ API управления HTTP и rabbitmqctl util (см. List_queues, list_channels).
Вы не можете получить общее количество опубликованных сообщений, так как очередь была создана, и я думаю, что никто не реализует такую статистику, пока она бесполезна (FYI, при рассылке сообщений в среднем 10k в секунду вы даже не достигнете uint64 за несколько тысяч лет).