Микрозадание — это распределённая система планирования и выполнения задач, которая получает доступ к данным через общий путь Rest, используемый Джерси каждого компонента.
Подробная документация по разработке посетите официальный веб-сайт.
Толкование существительных:
- потребитель — узел потребления задач;
- расписание — планировщик задач;
- поставщик — производитель задач;
- реестр — реестр задач.
Реестр служит для регистрации узлов задач каждого компонента во всей экосистеме. Способ реализации реестра задач разнообразен. В настоящее время он включает память, zookeeper, redis, consul и т. д.
Создайте проект SpringBoot с помощью инструментов idea и eclipse и добавьте следующие зависимости в файл pom.xml.
<dependency>
<groupId>com.github.hengboy</groupId>
<artifactId>spring-boot-starter-registry-memory</artifactId>
<version>{lastVersion}</version>
</dependency>
Добавьте файл конфигурации application.yml в каталог ресурсов resources следующим образом:
server:
port: 9000
hengboy:
job:
registry:
# ask Registry Node Registration
away: memory
Каждая задача создаётся через диспетчер для распределения и выполнения. В процессе распределения разные задачи потребляются разными узлами потребителей в соответствии с конфигурацией стратегии балансировки нагрузки узлов потребителей. В производственных задачах узлы планировщика, которые выполняют планирование задач, также фильтруются в соответствии со стратегией балансировки нагрузки планировщика. Создайте проект SpringBoot с помощью инструментов idea и eclipse и добавьте следующие зависимости в файл pom.xml.
<dependency>
<groupId>com.github.hengboy</groupId>
<artifactId>spring-boot-starter-schedule</artifactId>
<version>{lastVersion}</version>
</dependency>
Добавьте файл конфигурации application.yml в каталог ресурсов resources следующим образом:
server:
port: 8081
hengboy:
job:
registry:
# Maintain consistency with task registry node registration
away: memory
schedule:
# Memory Scheduler handles task queues and storage of task logs
job-store-type: memory
Задачи определяются и сообщаются потребителем. Когда расписание вызывает потребителя для выполнения запроса задачи, соответствующий метод логики задачи автоматически выполняется в соответствии с jobKey. Создайте проект SpringBoot с помощью инструментов idea и eclipse и добавьте следующие зависимости в файл pom.xml.
<dependency>
<groupId>com.github.hengboy</groupId>
<artifactId>spring-boot-starter-consumer</artifactId>
<version>{lastVersion}</version>
</dependency>
Добавьте файл конфигурации application.yml в каталог ресурсов resources следующим образом:
server:
port: 8082
hengboy:
job:
registry:
# Maintain consistency with task registry node registration
away: memory
Давайте определим простую работу Job следующим образом:
@Job(jobExecuteAway = JobExecuteAwayEnum.ONCE)
public class TestJob implements MicroJob {
/**
* logger instance
*/
static Logger logger = LoggerFactory.getLogger(TestJob.class);
@Override
public JobExecuteResult execute(JobExecuteParam jobExecuteParam) throws JobException {
// ...
}
}
``` **Регистратор информации (logger.info)**
logger.info("Ключ: {} Параметр: {}", jobExecuteParam.getJobKey(), jobExecuteParam.getJsonParam());
return JobExecuteResult.JOB_EXECUTE_SUCCESS;
}
**Провайдер**
Бизнес-сторона добавляет зависимости и выполняет задачи по созданию вызовов MicroJobProvider.newXxxJob, такие как операция уведомления «Отправить почту» после создания заказа.
Создайте проект SpringBoot с помощью инструментов idea и eclipse и добавьте следующие зависимости в файл pom.xml.
```xml
<dependency>
<groupId>com.github.hengboy</groupId>
<artifactId>spring-boot-starter-provider</artifactId>
<version>{lastVersion}</version>
</dependency>
Добавьте файл конфигурации application.yml в каталог ресурсов resources следующим образом:
server:
port: 8083
hengboy:
job:
registry:
# Поддерживать согласованность с регистрацией узла реестра задач
away: memory
Пример выполнения JOB
@RunWith(SpringRunner.class)
@SpringBootTest
public class ProviderTester {
/**
* Зарегистрированный провайдер задач
*/
@Autowired
private MicroJobProvider microJobProvider;
@Test
public void newJob() {
// Созданные задачи выполняются только один раз
microJobProvider.newOnceJob(OnceJobWrapper.Context()
// JobKey, который соответствует задачам, определённым в потребителе, по умолчанию — имена классов в нижнем регистре
.jobKey("testJob")
// Настраиваемый ключ очереди задач, можно точно определить местоположение задач и выполнять операции паузы, удаления и другие операции
.jobQueueKey(UUID.randomUUID().toString())
// Параметры, параметры любого типа, когда потребитель потребляет, преобразуются в строки JSON
.param(new HashMap() {
{
put("name", "admin");
}
})
.wrapper());
}
}
Поток тестирования
Папки
```
.
├── micro-job-autoconfigure
├── micro-job-dependencies
├── micro-job-samples
│ ├── sample-consumer
│ ├── sample-provider
│ ├── sample-registry-consul
│ ├── sample-registry-memory
│ ├── sample-registry-redis
│ ├── sample-registry-zookeeper
│ ├── sample-schedule
│ ├── pom.xml
│ └── README.md
├── micro-job-starters
│ ├── spring-boot-starter
│ ├── spring-boot-starter-provider
│ ├── spring-boot-starter-registry-consul
│ ├── spring-boot-starter-registry-memory
│ ├── spring-boot-starter-registry-redis
│ ├── spring-boot-starter-registry-zookeeper
│ ├── spring-boot-starter-schedule
│ └── pom.xml
├── .travis.yml
├── LICENSE
├── pom.xml
└── README.md
```
Лицензия
Apache License
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )