Packages

trait RoleService[+F[_]] extends AbstractRole[F]

A type of role representing a persistent service.

Will be kept running forever up until the application is interrupted.

Linear Supertypes
AbstractRole[F], AnyRef, Any
Known Subclasses
Ordering
  1. Alphabetic
  2. By Inheritance
Inherited
  1. RoleService
  2. AbstractRole
  3. AnyRef
  4. Any
  1. Hide All
  2. Show All
Visibility
  1. Public
  2. Protected

Abstract Value Members

  1. abstract def start(roleParameters: RawEntrypointParams, freeArgs: Vector[String]): Lifecycle[F, Unit]

    Returns a izumi.distage.model.definition.Lifecycle with the start/shutdown of a service described by its acquire/release actions.

    Returns a izumi.distage.model.definition.Lifecycle with the start/shutdown of a service described by its acquire/release actions. The acquired service will be kept alive until the application is interrupted or is otherwise finished, then the specified release action of the Lifecycle will run for cleanup.

    Example:
    1. Often start is implemented using the izumi.distage.model.definition.Lifecycle.fork_ method to spawn a daemon fiber running the service in background.

      import izumi.distage.roles.model.RoleService
      import izumi.functional.bio.{F, IO2}
      import logstage.LogIO2
      import logstage.LogIO2.log
      
      final class HelloService[F[+_, +_]: IO2: LogIO2] extends RoleService[F] {
        def start(roleParameters: RawEntrypointParams, freeArgs: Vector[String]): Lifecycle[F[Nothing, _], Unit] = {
          Lifecycle.fork_(helloServer).void
        }
      
        val helloServer: F[Throwable, Unit] = {
          (for {
            name <- F.syncThrowable { Console.in.readLine() }
            _    <- log.info(s"Hello $name!")
          } yield ()).forever
        }
      }
    Note

    Resource initialization must be finite. Application startup won't progress until the acquire phase of the returned Lifecycle is finished. You may start a separate thread / fiber, etc during resource initialization. All the shutdown logic has to be implemented in the resource finalizer.