Запустить очередь Laravel из приложения Python

Я хочу отправить задание очереди Laravel из приложения Python. Как этого можно достичь?

@adyson Я исправил свой вопрос, как вы упомянули, я хочу запустить задание в laravel из моего приложения Python. Я думал создать полезную нагрузку таким образом, чтобы работа laravel подобрала ее, как только я отправлю ее в свою очередь Redis.

Tibin 20.08.2024 10:46

@Tibin Но почему? Когда Laravel помещает задание в очередь, полезная нагрузка сериализуется с множеством деталей, специфичных для Laravel и PHP. Вам будет сложно имитировать это из приложения Python. Поэтому, пожалуйста, объясните проблему, которую вы пытаетесь решить; не попытка решения. Почему вы пытаетесь запустить задание очереди Laravel из приложения Python, а не из самого приложения Laravel?

Martin Bean 20.08.2024 10:48

@ Тибин, ты мог бы попробовать это, но я подозреваю, что сделать это правильно будет сложно. Почему бы просто не попросить Python поговорить с Laravel, как я предложил, и как пример дает документация? Тогда Laravel сможет правильно запустить задание, и вашему приложению Python не придется хранить все эти знания о том, как поместить нужную полезную нагрузку в правильную очередь и т. д. Все, что ему нужно знать, — это как отправить стандартный HTTP-запрос. Затем приложение Laravel должно обрабатывать внутренние компоненты так же, как и для любого задания, которое оно запускает само. Не смешивайте свои приложения вместе, как вы предлагаете, сохраняйте чистый интерфейс между ними.

ADyson 20.08.2024 10:50

Меня беспокоило то, что управление будет доступно общественности, конечно, у меня будет промежуточное программное обеспечение и аутентификация. Но я не знаю, стоит ли это делать.

Tibin 20.08.2024 10:53

Я думаю, что это намного лучше и менее хлопотно, чем пытаться эмулировать внутреннюю структуру очереди заданий Laravel в другом приложении. Нет ничего плохого в раскрытии контроллера, если на нем можно поставить необходимую аутентификацию и авторизацию.

ADyson 20.08.2024 10:54

Вы даже можете проверить IP-адрес, если хотите ограничить доступ определенному клиенту.

Olivier 20.08.2024 10:59

... и/или использовать аутентификацию по сертификату или что-то в этом роде для проверки запроса, чтобы только клиент/клиенты с правильным сертификатом могли даже подключиться к конечной точке. (Это если вы считаете, что обычного OAuth или того, что вы используете, будет недостаточно)

ADyson 20.08.2024 10:59

Понятно, пожалуйста, посмотрите мой текущий поток ниже. первый запрос -> worker_job_A (тайм-аут 10 минут) -> отправка message_to_python через_redis_queue (иногда выполняется в течение 20 минут), публикация ответа в другую очередь, которая будет перехвачена worker_job_A . целевой первый запрос -> Waker_job_A-> отправка очереди message_to_python_redis ответа python_posting через очередь -> выполненное задание laravel, в котором вы рекомендуете использовать контроллер. верно?

Tibin 20.08.2024 11:02

Меня беспокоило то, что управление будет доступно общественности. @Tibin По сути, вы описываете конечную точку веб-перехватчика. Вы можете «подписать» запрос в своем приложении Python, а затем заставить приложение Laravel проверять подпись при получении запросов. Если подпись недействительна, вы можете просто проигнорировать запрос.

Martin Bean 20.08.2024 11:02
laravel job executed, in which you are recommending to go with controller. Я думаю, да.
ADyson 20.08.2024 11:07

Круто, спасибо чувак

Tibin 20.08.2024 11:15
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
11
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если вашей целью является отправка задания из другого приложения, возможно, вы можете просто иметь контроллер в приложении Laravel, который принимает запросы о заданиях, генерирует задание и отправляет его вам, как в примере https://laravel.com/ docs/11.x/queues#dispatching-jobs

Пример воспроизведен здесь для полноты:

<?php
 
namespace App\Http\Controllers;
 
use App\Http\Controllers\Controller;
use App\Jobs\ProcessPodcast;
use App\Models\Podcast;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
 
class PodcastController extends Controller
{
    /**
     * Store a new podcast.
     */
    public function store(Request $request): RedirectResponse
    {
        $podcast = Podcast::create(/* ... */);
 
        // ...
 
        ProcessPodcast::dispatch($podcast);
 
        return redirect('/podcasts');
    }
}

Затем ваше приложение Python может просто отправить HTTP-запрос контроллеру, чтобы запустить задание.

Другие вопросы по теме