Size: a a a

2020 April 05

AR

Anton Rusakov in Laravel Pro
Или что имеется ввиду под другим сервером? Джоба как бы в бд кидается
источник

SF

Sasha Fedorchuk in Laravel Pro
Anton Rusakov
Сделать API на той стороне и дёрнуть его :)
Спасибо) Чет не подумал про это)
источник

SF

Sasha Fedorchuk in Laravel Pro
Anton Rusakov
Или что имеется ввиду под другим сервером? Джоба как бы в бд кидается
сервер №1 - это у меня API с которым общаетса клиент, а сервер №2 хочу использовать как обработчик задач(отправлять СМС, Почту, транзакции), чтобы снять нагрузку с сервера №1. Как обработчик очередей использую redis
источник

AR

Anton Rusakov in Laravel Pro
Sasha Fedorchuk
сервер №1 - это у меня API с которым общаетса клиент, а сервер №2 хочу использовать как обработчик задач(отправлять СМС, Почту, транзакции), чтобы снять нагрузку с сервера №1. Как обработчик очередей использую redis
Ты же понимаешь что джоба кладется в mysql базу данных
источник

DE

Dmitry Eliseev in Laravel Pro
Sasha Fedorchuk
сервер №1 - это у меня API с которым общаетса клиент, а сервер №2 хочу использовать как обработчик задач(отправлять СМС, Почту, транзакции), чтобы снять нагрузку с сервера №1. Как обработчик очередей использую redis
Ну так подключить оба к одному Redis и одной БД и на втором запустить воркер.
источник

AR

Anton Rusakov in Laravel Pro
Ну или редис
источник

AR

Anton Rusakov in Laravel Pro
:)
источник

AR

Anton Rusakov in Laravel Pro
Просто один только кладет туда, а второй разбирает
источник

SF

Sasha Fedorchuk in Laravel Pro
Ребята, спасибо)
источник

S

Sergey in Laravel Pro
Всем привет!
Мой запрос содержит массив в form-data, аналог запроса в формате JSON:
{
       "tariff_name": "some_name",
       "tariff_type": "some_type",
       "settings": [
           {
              "service_id": 1,
              "limit_id": 1,
              "cost_per_item": 1.99
          }
       ]
   }
В доках по Laravel нашёл синтаксис для валидации массивов, и написал свой класс,
наследник класса FormRequest, для валидации запроса. Правила:

public function rules()
{
   return [
       'tariff_name' => ['bail', 'required', 'string', 'max:100', 'min:1'],
       'tariff_type' => ['bail', 'required', Rule::in(TariffType::types())],
       'settings' => ['bail', 'required', 'array'],
       'settings.*.service_id' => ['bail', 'required', 'numeric', 'distinct', 'exists:services,id'],
       'settings.*.limit_id' => ['bail', 'required', 'numeric', 'exists:limits,id'],
       'settings.*.cost_per_item' => ['bail', 'required', 'numeric'],
   ];
}
Имена input элементов для settings в форме такие:
settings[1][service_id]
settings[1][limit_id]
settings[1][cost_per_item]
Однако при вызове функции Input::old для этих имён всегда получаю NULL, и поэтому все поля формы надо заполнять заново.
Подскажите, плиз, что я делаю не так?
источник

Г

Георгий in Laravel Pro
Sergey
Всем привет!
Мой запрос содержит массив в form-data, аналог запроса в формате JSON:
{
       "tariff_name": "some_name",
       "tariff_type": "some_type",
       "settings": [
           {
              "service_id": 1,
              "limit_id": 1,
              "cost_per_item": 1.99
          }
       ]
   }
В доках по Laravel нашёл синтаксис для валидации массивов, и написал свой класс,
наследник класса FormRequest, для валидации запроса. Правила:

public function rules()
{
   return [
       'tariff_name' => ['bail', 'required', 'string', 'max:100', 'min:1'],
       'tariff_type' => ['bail', 'required', Rule::in(TariffType::types())],
       'settings' => ['bail', 'required', 'array'],
       'settings.*.service_id' => ['bail', 'required', 'numeric', 'distinct', 'exists:services,id'],
       'settings.*.limit_id' => ['bail', 'required', 'numeric', 'exists:limits,id'],
       'settings.*.cost_per_item' => ['bail', 'required', 'numeric'],
   ];
}
Имена input элементов для settings в форме такие:
settings[1][service_id]
settings[1][limit_id]
settings[1][cost_per_item]
Однако при вызове функции Input::old для этих имён всегда получаю NULL, и поэтому все поля формы надо заполнять заново.
Подскажите, плиз, что я делаю не так?
судя по json у тебя в 0 ключе хранятся, а ты из первого запрашиваешь settings[1][service_id]
источник

S

Sergey in Laravel Pro
Георгий
судя по json у тебя в 0 ключе хранятся, а ты из первого запрашиваешь settings[1][service_id]
Спасибо! Буквально сразу же разобрался, мб кому ещё поможет:
Надо запрашивать old значения в формате, в котором их видит валидатор, т.е. old(settings.1.service_id) и т.д.
источник

AB

Andrey Bogdanov in Laravel Pro
Jensen
Всем привет. Вопрос по архитектуре.

У меня поступает запрос от браузера пользователя в Laravel-приложение. По этому запросу нужно загрузить из другого источника данные и отдать пользователю.
Запрос поступает скажем в метод AnyController::loadData()

Раньше источник данных был один.
В этом случае я прямо в коде AnyController::loadData() я делал запрос через PHP библиотеку Guzzle к стороннему api, обрабатывал запрос, ошибки и возвращал назад пользователю.


Сейчас источников данных три. Они отвечают с разной скоростью и разной полнотой ответа. При этом есть задача максимально быстро показать пользователю результат, а потом уже догружать данные.

Есть три варианта, но все они работают по одному принципу:

В AnyController::loadData() я создаю идентификатор ответа IDRESPONCE и сразу его возвращаю пользователю в браузер. И тут же параллельно запускаются три задачи на дозагрузку данных. Каждая из этих задач кладет ответ в БД и указывает IDRESPONCE.
А в браузере я поллингом ломлюсь каждую секунду к другому методу AnyController::getNewData(передаю ему IDRESPONCE) и жду появления записей.



Вопрос: как организовать параллельную загрузку данных?

1. PHP PThreads. в методе AnyController::loadData() стартануть три потока и они пусть молотят данные дальше. Но множить потоки на каждый запрос, это стрёмно, откровенно.

2. Queue. в методе AnyController::loadData() кладу в очередь три задачи на загрузку, а дальше их воркеры берут из очереди и обрабатывают. Тут всё отлично, кроме того, что нужна работоспособная очередь и я не знаю насколько это будет быстро.

3. Node.js Реализовать метод AnyController::loadData() не на Laravel а в Node.js. Но тут проблема с CSRF-токеном, не хотелось бы терять его, а в ноду его не прокинешь.
Дозагружать данные можно через сокеты, как получены, отправлять на клиент просто новую порцию данных в каждой из 3-ех очередей, чтобы не спамить вебсокет, сделать буфер в 5-10-20 записей и при его заполнении обнулять его и посылать вебсокет

csrf токен можно получать и устанавливать себе из куки, например использовать laravel airlock/sanctum, если например используется node и axios
https://divinglaravel.com/authentication-and-laravel-airlock

Before authenticating the user, you need to make a GET request to /airlock/csrf-cookie. The response will include the XSRF-TOKEN cookie which will be stored in your browser and used by your HTTP client (e.g. axios) in future requests.

Как альтернативный вариант, если данные не очень часто обновляются, то можно их складывать к себе в базу с помощью планировщика задач например каждый час, тогда из своей базы будет уже просто получить
источник

S

Sultan in Laravel Pro
Привет. Мне нужно обработать и хранить платежи для мобильного приложения через Play Store/App Store. Кто знает есть готовые либы для Laravel? Может кто работал?
источник

VS

Vitaliy Sheverov in Laravel Pro
Привет, ребята как заставить команду выполнится через некотрое время(5 минут)

\Artisan::queue('test:me', [
   'website_id' => $website->id
]);


вот так запускается сразу, а как отложить на 5 минут?
источник

IG

Ilya Goryachev in Laravel Pro
источник

VS

Vitaliy Sheverov in Laravel Pro
у меня фалика джобы как бы нету, только команда
источник

IG

Ilya Goryachev in Laravel Pro
Artisan::queue()->delay();
источник

IG

Ilya Goryachev in Laravel Pro
Можно же попробовать написать вызов метода, а IDE бы показала, какие методы доступны для вызова
Это совет, потому что, например, я вообще впервые вижу вызов
Artisan::queue()
, но зайдя в исходный код можно увидеть, что метод queue возвращает PendingDispatch, а в нём содержится метод delay()
источник

RK

Roman Kolosov in Laravel Pro
Ilya Goryachev
Artisan::queue()->delay();
какашко код, в кернел команду задайте
источник