Я хочу отправить задание очереди Laravel из приложения Python. Как этого можно достичь?
@Tibin Но почему? Когда Laravel помещает задание в очередь, полезная нагрузка сериализуется с множеством деталей, специфичных для Laravel и PHP. Вам будет сложно имитировать это из приложения Python. Поэтому, пожалуйста, объясните проблему, которую вы пытаетесь решить; не попытка решения. Почему вы пытаетесь запустить задание очереди Laravel из приложения Python, а не из самого приложения Laravel?
@ Тибин, ты мог бы попробовать это, но я подозреваю, что сделать это правильно будет сложно. Почему бы просто не попросить Python поговорить с Laravel, как я предложил, и как пример дает документация? Тогда Laravel сможет правильно запустить задание, и вашему приложению Python не придется хранить все эти знания о том, как поместить нужную полезную нагрузку в правильную очередь и т. д. Все, что ему нужно знать, — это как отправить стандартный HTTP-запрос. Затем приложение Laravel должно обрабатывать внутренние компоненты так же, как и для любого задания, которое оно запускает само. Не смешивайте свои приложения вместе, как вы предлагаете, сохраняйте чистый интерфейс между ними.
Меня беспокоило то, что управление будет доступно общественности, конечно, у меня будет промежуточное программное обеспечение и аутентификация. Но я не знаю, стоит ли это делать.
Я думаю, что это намного лучше и менее хлопотно, чем пытаться эмулировать внутреннюю структуру очереди заданий Laravel в другом приложении. Нет ничего плохого в раскрытии контроллера, если на нем можно поставить необходимую аутентификацию и авторизацию.
Вы даже можете проверить IP-адрес, если хотите ограничить доступ определенному клиенту.
... и/или использовать аутентификацию по сертификату или что-то в этом роде для проверки запроса, чтобы только клиент/клиенты с правильным сертификатом могли даже подключиться к конечной точке. (Это если вы считаете, что обычного OAuth или того, что вы используете, будет недостаточно)
Понятно, пожалуйста, посмотрите мой текущий поток ниже. первый запрос -> worker_job_A (тайм-аут 10 минут) -> отправка message_to_python через_redis_queue (иногда выполняется в течение 20 минут), публикация ответа в другую очередь, которая будет перехвачена worker_job_A . целевой первый запрос -> Waker_job_A-> отправка очереди message_to_python_redis ответа python_posting через очередь -> выполненное задание laravel, в котором вы рекомендуете использовать контроллер. верно?
Меня беспокоило то, что управление будет доступно общественности. @Tibin По сути, вы описываете конечную точку веб-перехватчика. Вы можете «подписать» запрос в своем приложении Python, а затем заставить приложение Laravel проверять подпись при получении запросов. Если подпись недействительна, вы можете просто проигнорировать запрос.
laravel job executed, in which you are recommending to go with controller
. Я думаю, да.
Круто, спасибо чувак
Если вашей целью является отправка задания из другого приложения, возможно, вы можете просто иметь контроллер в приложении 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-запрос контроллеру, чтобы запустить задание.
@adyson Я исправил свой вопрос, как вы упомянули, я хочу запустить задание в laravel из моего приложения Python. Я думал создать полезную нагрузку таким образом, чтобы работа laravel подобрала ее, как только я отправлю ее в свою очередь Redis.