feat: v2 - add worker mode (#6739)

**What**
- Adds support for starting a Medusa process with a worker mode.
- The worker modes supported are "shared", "worker", "server"
- In "worker" mode, API routes are not registered and modules that need to run workers (e.g., event bus redis) can use the flag to conditionally start workers.
- In "server" mode, API routes are registered and workers are not started.
- In "shared" mode, API routes are registered and workers are started. This is great for development.
This commit is contained in:
Sebastian Rindom
2024-03-21 14:08:20 +01:00
committed by GitHub
parent 205573f5e3
commit 56481e683d
11 changed files with 141 additions and 58 deletions

View File

@@ -71,7 +71,8 @@ export async function loadModules(
modulesConfig,
sharedContainer,
migrationOnly = false,
loaderOnly = false
loaderOnly = false,
workerMode: "shared" | "worker" | "server" = "server"
) {
const allModules = {}
@@ -113,6 +114,7 @@ export async function loadModules(
moduleExports,
migrationOnly,
loaderOnly,
workerMode,
})) as LoadedModule
if (loaderOnly) {
@@ -202,6 +204,7 @@ export type MedusaAppOutput = {
}
export type MedusaAppOptions = {
workerMode?: "shared" | "worker" | "server"
sharedContainer?: MedusaContainer
sharedResourcesConfig?: SharedResources
loadedModules?: LoadedModule[]
@@ -232,6 +235,7 @@ async function MedusaApp_({
onApplicationStartCb,
migrationOnly = false,
loaderOnly = false,
workerMode = "server",
}: MedusaAppOptions & { migrationOnly?: boolean } = {}): Promise<{
modules: Record<string, LoadedModule | LoadedModule[]>
link: RemoteLink | undefined
@@ -300,7 +304,8 @@ async function MedusaApp_({
modules,
sharedContainer_,
migrationOnly,
loaderOnly
loaderOnly,
workerMode
)
if (loaderOnly) {

View File

@@ -69,6 +69,7 @@ export type ModuleBootstrapOptions = {
* Forces the modules bootstrapper to only run the modules loaders and return prematurely
*/
loaderOnly?: boolean
workerMode?: "shared" | "worker" | "server"
}
export type LinkModuleBootstrapOptions = {
@@ -225,6 +226,7 @@ export class MedusaModule {
injectedDependencies,
migrationOnly,
loaderOnly,
workerMode,
}: ModuleBootstrapOptions): Promise<{
[key: string]: T
}> {
@@ -267,6 +269,7 @@ export class MedusaModule {
options: declaration?.options ?? declaration,
alias: declaration?.alias,
main: declaration?.main,
worker_mode: workerMode,
}
}
@@ -302,7 +305,7 @@ export class MedusaModule {
moduleResolutions,
logger: logger_,
migrationOnly,
loaderOnly
loaderOnly,
})
} catch (err) {
errorLoading(err)