1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/zengfr-stepchain

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Это зеркальный репозиторий, синхронизируется ежедневно с исходного репозитория.
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Stepchain-spring-boot-starter

Java Pipeline Step Chain — это как Apache Commons Chain и Commons Pipeline. Популярной техникой организации выполнения сложных процессов обработки является паттерн «Цепочка ответственности».

Stepchain — это универсальная структура для обработки бизнес-процессов, подобная Java Pipeline Step Chain, которая используется для организации выполнения сложных процессов обработки.

Особенности:

  1. Поддержка неограниченного разделения общих бизнес-задач и сервисов на подпроцессы.
  2. Поддержка последовательной и параллельной обработки бизнес-подпроцессов с возможностью настройки.
  3. Поддержка включения или отключения бизнес-подпроцессов в конфигурации, а также унифицированная настройка последовательности и параллелизма.
  4. Поддержка произвольного бесконечного вложения бизнес-процессов и подпроцессов.
  5. Поддержка унифицированного интерфейса данных, такого как Redis, ES, журналы Trace и т. д.
  6. Поддержка параллельных ветвей, условных ветвей if/else, switch и циклов loop в подпроцессах.
  7. Поддержка диспетчеризации процессоров с фиксированным расписанием FixedRate и фиксированной задержкой FixedDelay.
  8. Полностью открытый исходный код, доступный по лицензии Apache-2.0 без ограничений на коммерческое использование.

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

Примечание 2: если вам это помогло, пожалуйста, fork start или сделайте пожертвование. Следите за мной. Спасибо!

Сайт проекта:

Gitee: https://gitee.com/zengfr/stepchain GitHub: https://github.com/zengfr/stepchain/

Быстрый старт:

Центральные репозитории

Центральные репозитории Sonatype Mvnrepository

Зависимости

— Maven (не использует Spring Boot):

<dependency>
  <groupId>com.github.zengfr.project</groupId>
  <artifactId>stepchain</artifactId>
  <version>0.0.7</version>
</dependency>

— Maven (использует Spring Boot):

<dependency>
  <groupId>com.github.zengfr.project</groupId>
  <artifactId>stepchain-spring-boot-starter</artifactId>
  <version>0.0.7</version>
</dependency>

— Gradle:

compile group: 'com.github.zengfr.project', name: 'stepchain', version: '0.0.7'
compile group: 'com.github.f.project', name: 'stepchain-spring-boot-starter', version: '0.0.7'

Javadoc Api

Интерфейс Pipeline ChainBuilder StepBuilder Step Chain Javadoc api документация stepchain-uml-class

Вопросы и ответы

  1. Какова основная идея StepChain и как она реализована? 1.1. Любая бизнес-логика обрабатывается абстрактно как 1\input ввод, 2\ процессор обработки, 3\output вывод. Промежуточные результаты генерируются и объединяются в dataMiddle. 1.2. Любая бизнес-логика использует несколько процессоров для выполнения.
  2. Как StepChain выполняет несколько процессоров параллельно и последовательно? 2.1. Последовательно: step = pipeline.createStep(); step.put(processors); // процессоры выполняются последовательно. 2.2. Параллельно: step = pipeline.createStep(4); step.put(processors); // четыре процессора выполняются одновременно.
  3. Как создать процессор в Stepchain? 3.1. Реализовать интерфейс IProcessor. 3.2. Использовать IProcessorBuilder:
IProcessor<I, Boolean> createProcessor(Predicate<I> predicate);
IProcessor<I, Boolean> createProcessor(Consumer<I> consumer);
IProcessor<I, O> createProcessor(Function<I, O> func);
  1. Как повторно использовать и комбинировать процессоры в StepChain? 4.1. Использовать IChainBuilder, IChain. 4.2. Использовать IProcessorBuilder:
A, B, C> IProcessor<A, C> createProcessor(IProcessor<A, B> first, IProcessor<B, C> second);
A, B, C, D> IProcessor<A, D> createProcessor(IProcessor<A, B> processor1, IProcessor<B, C> processor2, IProcessor<C, D> processor3);
  1. Как условно повторно использовать и комбинировать процессоры в StepChain? Ответ: 5.1. Есть два процессора trueProcessor и falseProcessor, создаётся validator, который выполняет один из них в зависимости от условия.
IConditionSelectorProcessor<String, Boolean, String> p3 = pipeline.createConditionValidatorProcessor(validator, trueProcessor, falseProcessor);
5.2. Есть процессор, создаётся validator для создания цикла выполнения, который завершается, когда validator возвращает false.
IConditionLoopProcessor<String, String> p2 = pipeline.createConditionLoopProcessor(validator, processor);
5.3. Есть процессор, создаётся selector для логики выбора, который выбирает ветвь для выполнения на основе ключа, возвращаемого selector. Если ключ не соответствует ни одной ветви, выполняется ветвь по умолчанию.
IConditionSelectorProcessor<String, String, String> p1 = pipeline.createConditionSelectorProcessor(selector);
p1.setBranch(S key, IProcessor<I, O> processor);
p1setDefaultBranch(S key);
5.4. Есть процессор, создаётся логика if/else if/else. Результат сравнивается с результатом validator, и если они совпадают, то выполняется соответствующая ветвь branchProcessor. В противном случае выполняется ветвь defaultBranchProcessor по умолчанию. **UnaryContext<Integer> контекст = pipeline.createContext(12345678);**

IStep<UnaryContext> шаг = pipeline.createStep(); IStep<UnaryContext> шаг2 = pipeline.createStep();

IChain<UnaryContext, Boolean> c2 = pipeline.createChain(func);

IChain<UnaryContext, String> c3 = pipeline.createChain(func3); Function<String, Integer> func4 = null; Function<Integer, String> func5 = null; Function<String, Boolean> func6 = null;

IChain<String,Integer > c4 = pipeline.createChain(func4); IChain<Integer, String> c5 = pipeline.createChain(func5); IChain<String, Boolean> c6 = pipeline.createChain(func6);

IChain<UnaryContext, Boolean> c7 = c3.next(c4).next(c5).next(c6);

шаг2.put(c2); шаг2.put(шаг); шаг2.put(func); //шаг2.put(с7);

шаг2.process(контекст); System.out.println(контекст.контекст); }

public static void testPipeline3(IPipeline pipeline) throws Exception { IProcessor<String, String> селектор = null; IProcessor<String, Boolean> валидатор = null;

IProcessor<String, String> процессор = null;
IProcessor<String, String> первый = null;
IProcessor<String, String> второй = null;

IConditionSelectorProcessor<String, Boolean, String> p3 = pipeline.createConditionValidatorProcessor(валидатор, первый, второй);
IConditionLoopProcessor<String, String> p2 = pipeline.createConditionLoopProcessor(валидатор, процессор);

IConditionSelectorProcessor<String, String, String> p1 = pipeline.createConditionSelectorProcessor(селектор);

}


##### StepChainSpringBootTest
```java
@RunWith(SpringRunner.class)
@SpringBootTest(classes = StepChainTestApplication.class)
public class StepChainSpringBootTest {
    @Autowired
    protected IPipeline pipeline;
    @Test
    public void testPipeline() throws Exception {
        PipelineTest.testPipeline(pipeline);
    }
    @Test
    public void testPipeline2() throws Exception {
        PipelineTest.testPipeline2(pipeline);
    }
}

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Описание недоступно Расширить Свернуть
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://gitlife.ru/oschina-mirror/zengfr-stepchain.git
git@gitlife.ru:oschina-mirror/zengfr-stepchain.git
oschina-mirror
zengfr-stepchain
zengfr-stepchain
master