feat(core): Set up leader selection for multiple main instances (#7527)

https://linear.app/n8n/issue/PAY-933/set-up-leader-selection-for-multiple-main-instances

- [x] Set up new envs
- [x] Add config and license checks
- [x] Implement `MultiMainInstancePublisher`
- [x] Expand `RedisServicePubSubPublisher` to support
`MultiMainInstancePublisher`
- [x] Init `MultiMainInstancePublisher` on startup and destroy on
shutdown
- [x] Add to sandbox plans
- [x] Test manually

Note: This is only for setup - coordinating in reaction to leadership
changes will come in later PRs.
This commit is contained in:
Iván Ovejero
2023-10-30 16:22:32 +01:00
committed by GitHub
parent 3b5e181e66
commit 442c73e63b
15 changed files with 247 additions and 54 deletions

View File

@@ -32,7 +32,7 @@ import { Container, Service } from 'typedi';
import { ExecutionRepository, WorkflowRepository } from '@/databases/repositories';
import type { AbstractEventMessageOptions } from '../EventMessageClasses/AbstractEventMessageOptions';
import { getEventMessageObjectByType } from '../EventMessageClasses/Helpers';
import { OrchestrationMainService } from '@/services/orchestration/main/orchestration.main.service';
import { SingleMainInstancePublisher } from '@/services/orchestration/main/SingleMainInstance.publisher';
import { Logger } from '@/Logger';
export type EventMessageReturnMode = 'sent' | 'unsent' | 'all' | 'unfinished';
@@ -207,7 +207,7 @@ export class MessageEventBus extends EventEmitter {
this.destinations[destination.getId()].startListening();
if (notifyWorkers) {
await Container.get(
OrchestrationMainService,
SingleMainInstancePublisher,
).broadcastRestartEventbusAfterDestinationUpdate();
}
return destination;
@@ -235,7 +235,7 @@ export class MessageEventBus extends EventEmitter {
}
if (notifyWorkers) {
await Container.get(
OrchestrationMainService,
SingleMainInstancePublisher,
).broadcastRestartEventbusAfterDestinationUpdate();
}
return result;