Как получить количество заданий в очереди в IronMQ, используя Laravel 5.1?

Внедряя очереди и задания в Laravel 5.1 в моем проекте с использованием IronMQ, теперь я могу отправлять задания в очередь IronMQ, как показано на рисунке ниже:

Теперь я хочу получить текущее количество сообщений в очереди (число в красном поле) в функции handle моей работы, найти код работы ниже:

class GetWords extends Job implements SelfHandling, ShouldQueue{
use InteractsWithQueue, SerializesModels;


    /**
     * Create a new job instance.
     */
    public function __construct(Url $url)
    {
    }

    /**
     * Execute the job.
     */
    public function handle()
    {
        //getting the name of queue
        dd($this->job->getName()); //return 'words'

        $currentNumberMsgsInQueue = ?????; //i can't find how

        //Condition
        if($currentNumberMsgsInQueue == 10){
            //Do something
        }
    }
}

Вопрос: Как получить количество заданий в очереди (сообщений) в очереди IronMQ, используя Laravel?

1 ответ

Решение

После нескольких дней поиска я нашел ответ, нет method/function в Laravel 5.1 это может дать нам количество заданий в очереди в IronMQ.

Но в отличие от IronMQ On-Premise API Reference, мы предлагаем решение, это REST/HTTP API, который позволяет нам запрашивать различные запросы, используя javascript для установки / получения всего, что мы хотим из / в очередь (Get Queue, Update Queue, List Queues ...) и из / в сообщения в каждой очереди (Получить сообщение по идентификатору, Получить все сообщения, Очистить сообщения...).

Базовый URL:

https: // {Host} / {Версия API}/projects/{Project_ID}/queues/{Queue_Name}/messages/webhook?oauth={Token}

Например, если мы хотим получить количество сообщений в очереди, нам нужно просто получить информацию об очереди и посмотреть size из результата.

GET /queues/{Queue Name}

Практический пример:

Вы можете найти свою первую базовую ссылку в соответствующей очереди в вашем проекте в разделе URL-адреса Webhook (см. Рисунок ниже):

введите описание изображения здесь

JS код:

//To get queue info we have url : GET /queues/{Queue Name}
var url = "https://{Host}/{API Version}/projects/{Project_ID}/queues/{Queue_Name}?oauth={Token}";

//Using ajax $.get
$.get( url ,
function( result ) {
     alert( "Queue size is :" + result["queue"]["size"]);
});

Результат:

{
  "queue": {
    "project_id": 123,
    "name": "my_queue",
    "size": 0,
    "total_messages": 0,
    "message_timeout": 60,
    "message_expiration": 604800,
    "type": "pull/unicast/multicast",
    "push": {
      "subscribers": [
        {
          "name": "subscriber_name",
          "url": "http://mysterious-brook-1807.herokuapp.com/ironmq_push_1",
          "headers": {
            "Content-Type": "application/json"
          }
        }
      ],
      "retries": 3,
      "retries_delay": 60,
      "error_queue": "error_queue_name",
      "rate_limit": 10
    }
  }
}
Другие вопросы по тегам