Progress28.ru

IT Новости
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Php subcat orchestrator employment

Php subcat orchestrator delivery

Внимание! Отгрузки всегда связаны с заказом. Использовать метод BitrixSaleShipment::save() для сохранения категорически запрещается . При изменении отгрузки может произойти изменение связанных сущностей, которые не будут сохранены. Необходимо выполнять сохранение через заказ: BitrixSaleOrder::save() . Помимо всего этого в одной из ближайших версий вызов BitrixSaleShipment::save() будет генерировать ошибку уровня E_WARNING .

Одной из особенностей данной архитектуры является наличие скрытой системной отгрузки. В этой отгрузке находятся товары, которые не были распределены по отгрузкам.

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

  • либо количество товара уменьшится,
  • либо товар полностью из системной отгрузки переместится в обычную отгрузку.

В первом случае с этой отгрузкой ничего нельзя сделать: ни отгрузить, ни удалить. Поэтому правильнее ее исключать во время обхода коллекции (см. примеры Работа с коллекцией без системной отгрузки или Получение конкретной отгрузки).

Получение отгрузок:

  • Работа с коллекцией
  • Работа с коллекцией без системной отгрузки
  • Работа с массивом

Помимо объектов есть возможность напрямую обращаться к базе через метод BitrixSaleShipmentCollection::getList($parameters) , либо BitrixSaleShipment::getList($parameters) . Оба этих метода работают аналогично.

Метод всегда возвращает объект BitrixMainDBResult , из которого можно получить данные с помощью метода fetch() .

ПараметрОписаниеС версии
$parametersМассив, структура которого полностью соответствует структуре ORM’ного getList.

Получение конкретной отгрузки

  • по ID
  • по внутреннему индексу
  • по коду

Добавление отгрузки

  • Вариант 1:
  • Вариант 2:

Редактирование отгрузки

В обоих случаях результатом работы метода является объект класса BitrixSaleResult .

Список доступных для редактирования полей:

Удаление отгрузки

Возвращает объект типа BitrixSaleResult .

Получение стоимости доставки

Получение статуса отгрузки

Управление флагом разрешения доставки

  • Доставка разрешена
  • Доставка не разрешена

Управление флагом отгрузки доставки

  • Доставка отгружена
  • Доставка не отгружена

Изменение стоимости доставки

В метод так же можно передать второй параметр: является ли цена кастомной. Если да, то передается true . По умолчанию он равен false .

Получение распределенного количества товара по отгрузкам

Получение стоимости всех доставок в заказе:

  • без учета скидок/наценок
  • с учетом скидок/наценок

Установка склада самовывоза для отгрузки

В примере заказ уже существует. Для нового заказа код аналогичный.

Получение списка доступных служб доставок с учетом настроенных ограничений

ПараметрыОписаниеС версии
$shipmentОбъект отгрузки.
$modeОдно из двух значений:

По умолчанию: BitrixSaleServicesBaseRestrictionManager::MODE_CLIENT . В режиме клиента возвращается список только тех служб доставок, которые попадают под ограничения.

В режиме менеджера возвращается полный список служб доставок (доставки, которые не подают под ограничения, имеют ключ RESTRICTED ).

Пользовательские комментарии

Мы будем рады, если разработчики добавят свои комментарии по практическому использованию методов системы.

Для этого нужно всего лишь авторизоваться на сайте

Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.

Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.

Метод возвращает результат выборки записей из служб доставки в соответствии со своими параметрами. Метод статический.

Параметры вызова

ПараметрОписаниеС версии
arOrderМассив, в соответствии с которым сортируются результирующие записи. Массив имеет вид: В качестве «название_поляN» может стоять любое поле корзины, а в качестве «направление_сортировкиX» могут быть значения «ASC» (по возрастанию) и «DESC» (по убыванию).

Если массив сортировки имеет несколько элементов, то результирующий набор сортируется последовательно по каждому элементу (т.е. сначала сортируется по первому элементу, потом результат сортируется по второму и т.д.).

Значение по умолчанию — пустой массив array() — означает, что результат отсортирован не будет.

arFilterМассив, в соответствии с которым фильтруются записи службы доставки. Массив имеет вид: Удовлетворяющие фильтру записи возвращаются в результате, а записи, которые не удовлетворяют условиям фильтра, отбрасываются.

Допустимыми являются следующие модификаторы:

  • ! — отрицание;
  • + — значения null, 0 и пустая строка так же удовлетворяют условиям фильтра.

Допустимыми являются следующие операторы:

  • >= — значение поля больше или равно передаваемой в фильтр величины;
  • > — значение поля строго больше передаваемой в фильтр величины;

Как быстро попробовать CQRS/ES в Laravel или пишем банк на PHP

Недавно в подкасте «Цинковый прод» мы с товарищами обсуждали паттерн CQRS/ES и некоторые особенности её реализации в Elixir. Т.к. я в работе использую Laravel, грех было не покопаться в интернетах и не найти как же можно потягать этот подход в экосистеме данного фреймворка.

Всех приглашаю под кат, постарался максимально тезисно описать тему.

Немножко определений

CQRS (Command Query Responsibility Segregation) — выделение в отдельные сущности операции чтения и записи. Например пишем в мастер, читаем из реплики. CQRS. Факты и заблуждения — поможет досконально познать дзен CQRS.
ES (Event Sourcing) — хранение всех изменений состояния какой-либо сущности или набора сущностей.
CQRS/ES — это архитектурный подход при котором мы сохраняем все события изменения состояния какой либо сущности в таблице событий и добавляем к этому агрегат и проектор.
Агрегат — хранит в памяти свойства, необходимые для принятия решений бизнес логики (для ускорения записи), принимает решения (бизнес логика) и публикует события.
Проектор — слушает события и пишет в отдельные таблицы или базы (для ускорения чтения).

В бой

Laravel event projector — библиотека CQRS/ES для Laravel
Larabank — репозиторий с реализованным CQRS/ES подходом. Его и возьмем на пробу.

Конфигурация библиотеки подскажет куда смотреть и расскажет, что это такое. Смотрим файл event-projector.php. Из необходимого для описания работы:

  • projectors — регистрируем проекторы;
  • reactors — регистрируем реакторы. Реактор — в данной библиотеке добавляет сайд-эффекты в обработку событий, например в этом репозитории, если три раза попытаться превысить лимит снятия средств, то пишется событие MoreMoneyNeeded и отправляется письмо пользователю о его финансовых трудностях;
  • replay_chunk_size — размер чанка повтора. Одна из фич ES — возможность восстановить историю по событиям. Laravel event projector подготовился к утечке памяти во время такой операции с помощью данной настройки.

Обращаем внимание на миграции. Кроме стандартных Laravel таблиц имеем

  • stored_events — основная ES таблица с несколькими колонками неструктурированных данных под мета данные событий, строкой храним типы событий. Важная колонка aggregate_uuid — хранит uuid агрегата, для получения всех событий относящихся к нему;
  • accounts — таблица проектора счетов пользователя, необходима для быстрой отдачи актуальных данных о состоянии баланса;
  • transaction_counts — таблица проектора количества транзакций пользователя, необходима для быстрой отдачи количества совершенных транзакций.

А теперь предлагаю отправиться в путь вместе с запросом на создание нового счета.

Создание счета

Стандартный resource роутинг описывает AccountsController. Нас интересует метод store

AccountAggregateRoot наследует библиотечный AggregateRoot. Посмторим на методы, которые вызывал контроллер.

Метод persist вызывает метод storeMany у модели указанной в конфигурации event-projector.php как stored_event_model в нашем случае StoredEvent

Проекторы AccountProjector и TransactionCountProjector реализуют Projector поэтому реагировать на события будут синхронно вместе с их записью.

Ок, счет создали. Предлагаю рассмотреть как же клиент будет его читать.

Отображение счета

Если проектор счетов реализует интерфейс QueuedProjector, то пользователь ничего не увидит пока событие не будет обработано по очереди.

Напоследок изучим, как работает пополнение и снятие денег со счета.

Пополнение и снятие

Снова смотрим в контроллер AccountsController:

Design A Highly Available MySQL Clusters With Orchestrator And ProxySQL In GCP — Part 2

In part1, we explained how we are going to approach the HA setup. Here we can see how to install and configure Orchestrator and ProxySQL, then do the failover testing.

Install and configure MySQL Replication:

We need a MySQL with 4 Read replica and the 4’th replica will have a replica for it. And we must have to use GTID replication. Because once the master failover done, the remaining replicas will start replicating from the new master. Without GTID its not possible, but as an alternate Orchestrator provides Pseudo-GTID.

VM Details:

  • Subnet: 10.142.0.0/24
  • OS: Ubuntu 18.04LTS

Installing MySQL on all servers:

Enable GT >Do the below changes on all the servers on my.cnf file and restart mysql service.
Note: server-id must be unique for all the servers. So use different ids for other servers.

Create a database with sample data:

Run the below queries on mysql-01

Backup the database:

Run the command on mysql-01

Create the user for replication:

Run the query on mysql-01

Establish the Replication:

Restore the database on the below servers and run the below query.

Setup Replication for Report Server:

Take the dump of report-01 server and restore it on report-ha

Enable SEMI-SYNC replication:

To prevent the dataloss and make sure the pending binlogs on the failover instances during the failover process, we need to enable Semi_sync between mysql-01 and mysql-ha .

Install the plugin on both servers.

Enable Semi-Sync on Master:

rpl_semi_sync_master_timeout — Master will wait for the acknowledgment till this value. Please give this value in milliseconds.

Enable Semi-Sync on Slave (replica-03):

We need to add this parameter in my.cnf as well.

Sometimes it’ll say invalid parameter then use the below lines instead.

Replication part has been done. Now its time to play with Orchestrator.

Install Orchestrator:

Orchestrator VM’s IP address: 10.142.0.4

It’s installed on /usr/local/orchestrator

Configuring Orchestrator:

We have a sample conf file the orchestrator’s home location. We need to copy that file as the main config file.

MySQL Backend:

Orchestrator needs a backend database either SQLite or MySQL. I prefer MySQL. And to make sure this will be in HA, we are going to use CloudSQL with Failover. But for this PoC I have installed MySQL on the server where I have Orchestrator.

So install MySQL and create a database and user for orchestrator.

Orchestrator needs to login on all of your nodes to detect the topology and perform seamless failover and etc. So we need to create a user for Orchestrator on all the servers. Run the below query on mysql-01 it’ll replicate it to all other slaves.

We are using orchestrator in autoscaling, so while creating the user use subnet range for the host.

Edit the Conf file:

Now we need to make the below changes on /usr/local/orchestrator/orchestrator.conf.json

Orchestrator backend details:

MySQL Topology User:

Promotion Node filters:

We want to Promote replica-03 when mysql-01 went down. It should not promote any other replica. So we need to tell don’t promote these nodes.

Other Parameters for failover:

Then start the Orchestrator.

The Web UI will run on port 3000.

To Read about the exact meaning of all parameters read the link.

Читать еще:  Php fopen utf 8
Ссылка на основную публикацию
Adblock
detector