Effect CommunityEC
Effect Communityβ€’3mo agoβ€’
33 replies
Stephen Bluck

Example for Providing Missing Services in @effect/workflow Setup

Just giving @effect/workflow a go and noticed the example in the readme does not have all services provided where the following are missing:
Sharding | MessageStorage

I don't suppose there is an example to get all of these provided?

I kinda got it type checking but I feel like I went down a bit of a rabbit hole:

const MessageStorageLive = MessageStorage.layerMemory.pipe(Layer.provide(ShardingConfig.layerDefaults));

const RunnersLive = Runners.layerNoop.pipe(
  Layer.provide(ShardingConfig.layerDefaults),
  Layer.provide(MessageStorageLive)
);

const ShardManagerClientLive = Layer.effect(ShardManager.ShardManagerClient, ShardManager.makeClientLocal).pipe(
  Layer.provide(ShardingConfig.layerDefaults)
);

const ShardingLive = Sharding.layer.pipe(
  Layer.provide(
    Layer.mergeAll(
      RunnersLive,
      ShardStorage.layerMemory,
      MessageStorageLive,
      ShardManagerClientLive,
      ShardingConfig.layerDefaults
    )
  )
);

const WorkflowEngineLayer = ClusterWorkflowEngine.layer.pipe(
  Layer.provide(NodeClusterRunnerSocket.layer({ storage: 'sql' })),
  Layer.provide(Layer.mergeAll(DatabaseLive, ShardingLive, MessageStorageLive))
);

const EnvLayer = TestWorkflowLive.pipe(Layer.provide(WorkflowEngineLayer));

program.pipe(Effect.provide(EnvLayer), NodeRuntime.runMain);
Was this page helpful?