แ แแ
แแฅแ แแตแฅ แจแฐแจแแแ แตแญแแต แแ
แญแ แจแแซแตแฐแแแตแ แตแ แ แตแฐแณแฝ แแแแต แแแซแต แฅแแแแแแแข
แแ
แฉ แ แ แตแฐแแแ แแแณ แ แแฅแณ แ Scala แแแ แแ แจแแแจแแแข แ แแต แแณแ แตแแ แซ แ แแญแแญ แฐแแแฟแ. แ แ แ แแแญ แจแฅแตแแต แแฐแต แแญ แฐแฝแฅแแ แจแแฎ แจแฐแแซแฉ แจแแณแ แแณแฆแฝ แฐแฅแซแญแฐแแ.
แแแขแซ
แ แแซแซ แจแฐแจแแแ แตแญแแถแฝแ แแแแฃแต แ แแแ แ แแแแฝ แแญ แตแญแญแแ แฅแ แแฅแแต แซแแ แแ แญ แแ แแแ แญแ แญแแแข แจแฐแแแฐแ แแแตแ แจแฝแแ แแฐแแซแต แแแแซแ (แดแซแแญแแฃ แแปแ แจแแฝแ แแญแ แฐแแณแณแญ แจแแ แแแญ) แฅแ แ แซแต-แฐแญ แจแแแแฉ แจแแ แญ แแญแแฝแ (แฅแแแ แแ - แแฅแซแแณแแฑ แแตแแแ แแแแต/แแ) แแ แแ แแแข แ แฅแซแแณแแฑ แจแแแแแต แ แแแแฝ แแญ แฐแแณแณแญ แตแชแถแฝ แฐแแณแณแญ แแฎแถแฎแแฝแ แแ แแ แฅแแแแแแ (แ แแ แแแซ แฐแณแแแแต แฝแแฎแฝ แซแแฅแแแ)แข แ JVM แแแ แญแ แแแต แขแซแแต แจแแแฅแญแต แแแแชแซ แคแฐ-แแฝแแแต แ แแแ แจแแแแ แแถแฝ แแญ แ แแต แ แญแแต แตแชแต แแแ แ แแ แต แแแต แแแข
แตแญแแฑแ แตแแแแจแญแต? แฅแญแแฅ แแแฃ แแฐ แแ แฐแต แแฐแแแฝ แจแแแฃแณแฝแ แ แแต แแแแ แ แซแแต แจแฉแแต แแฐแแแฝ แแแจแ แญแแฃแแข แจแแฐแ แแคแถแฝแ แ runtime แแญ แแแแฃแต แฅแแตแแฝแ แจแแแ แคแฐ-แแปแแแต แตแชแถแฝ แ แแแฑแ แจแฉแซ แแ แฅแ แจแแจแซ แ แซแฃแขแแฝ แฐแแณแณแญ แแซแแธแแ แแจแแแฅ แ แแฅแแข
แจแแ แฐแต แแจแซแแฝแ แ แแซแซแแฑแ แต แแ แ แแแ แ แแแแฝ แแญ แ แแต แ แญแแต แจแแแชแซ แแแแต แฅแแฒแแญแแต แฅแ แแ แแแ แแแข แฐแแณแณแญ แจแญแแ แฑแซ แ แแฐแแซแต แแญ แแ แแแ แแจแแแฅ แ แแฅแแข (แ แฐแแซแฉ แ แแแแฝ แแญ แจแฐแแซแฉ แจแญแแ แฑแซแแฝแ แแ แแ แญแปแแแฃแแแญ แแ แญแ แ แแ แญ แแแแจแ แฅแ แ แตแญแญแ แแแฐแแซแต แจแ แแ แจแฃแต แแแข
แแ
แจแต แจแถแแตแแฉ แแญ แ แฅแฎ แจแแปแปแ แ แแแแซ แ แแแข แจแฐแแซแฉ แแแฎแฝแ แแแแจแต แฅแ แแ แตแชแถแฝแ แฅแแ แแแแแข
แจแถแแตแแญ แแแแฐ แแแฅ แฐแจแแแฝ. แ แตแชแต แ แตแฐแณแฐแญ แตแญ แซแแแ แแ
แจแต แแแธแแ แฅแ แจแฐแแซแฉ แแ
แฎแฝแ แจแ แแณแแต แแแซแแฝ แแญ แแแจแต แแญแแซแณแ แญแแตแแแข แ แแญแต แแตแฅ แ แแต แแ
แจแต แฅแป แซแ แแ แ แฅแชแตแ แฅแแฐ แแแซ แแแ แแ แฅแแฝแแแแข แ แแณแแต แแ แ แญแซแณ แจแแญแต แ แซแฃแขแแฝ แแแจแ แญแฝแแแข แฅแ แแฅแซแแณแแฑ แ แซแฃแข แจแฐแแจ แจแแแแชแซ แ
แญแแซแ แแซแตแแแแ แญแฝแแแข แตแแแ
แแ
แจแถแฝ แแฉ แแฉ แแ
แฎแฝแ แแแแจแต แ แ
แญแแซแ แฅแ แตแชแต แแฐแจแ แญแฝแแแข แฅแซแแณแแฑ แจแ
แญแแซแ แแแซ แฅแ แฅแชแต แ แฅแซแแณแแฑ แแตแแแ แแแแต แแญ แซแ แจแฐแจแแแ แแถแฝแฃ แแฐแฆแฝแฃ แจแแช แแฅแถแฝแฃ แจแญแแ แฑแซ แคแฐแแแแแต แแ แ แฅแแญ แแญ แญแแแณแแข แฅแแ
แแ แแแ แ
แญแแซแ แฅแป แฅแแธแแแแ แฅแ แ แแแแฎแฝแ แ แถแตแต แ แซแ แ แตแญแฎแฝ แตแชแต (1.2.3) แฅแแแซแแแฃ แแญ แฅแแฐ แแแฝ แ
แญแถแฝแข
แ แแแแ แ แซแฃแขแแฝ แจแแแแชแซ แแญแแฝ แจแ แแ แ แแ แ แฅแ
แ แแฐแปแปแแแข แ แฐแแแถ แฅแ แฅแแแฅแซแแ
แ แแฐแแซแต แแ แแญแแฝแ แแแแญ แฅแ
แ แแ แแกแญ แฝแแ แแตแฅ แ แแแแฉแ แ แฐแแแฃแ แจ แ แญแต แแตแฅ แจแแ แ แ แ แแณแฅ แฅแแแจแแซแแ.
แแฃแแญ แจแแฝแ แแ แญ
แ แแ แญแแ แแตแฅ แจแตแณแฒแญ แแ แจแต แแณแแ แฅแแแแแซแแ. แแแต แแแ แ แแแแแถแฝ - แจ echo แ แแแแแต แฅแ แจ echo แ แแแแแต แฐแแ แ แฅแจแฐแแแฉ แฅแ แฅแจแฐแฐแแ แฉ แแธแแข แจแแซแ แจแแแฑแ แ แแแแแถแฝ แแญ แแแต แจแฐแแซแฉ แจแฐแจแแแ แตแญแแถแฝ แ แ แฝแ แต แญแฐแจแแ. แ แแฐแแ แแ แแต แแ แ แแตแแแ แแแแต แแ แญ แฒแแ แแแแ แฐแแ แแแแต แ แแแแฝ แแ แญ แแแข
แจแฐแแแฐแ แจแฐแจแแแ แตแญแแต แฅแแต แ แแแแฝแ แซแซแตแณแ. แ แแแแน แ แแณแแต แแญแแถแฝแ แ แแ แแ แแณแแ แญแฝแแ-
sealed trait NodeId
case object Backend extends NodeId
case object Frontend extends NodeId
แแญแ แตแญแญแแ
case class NodeId(hostName: String)
แแญแ แจแแซ แ แแญ
object Singleton
type NodeId = Singleton.type
แฅแแแ แ แแแแฝ แจแฐแแซแฉ แฐแแฃแซแตแ แซแจแแแแแฃ แ แแณแแต แ แแแแแถแฝแ แซแซแแณแ แฅแ แ TCP/HTTP แแแแแถแฝ แจแแแฝ แ แแแแฝ แแญ แแแแแต แแปแ แ แแฃแธแแข
แTCP แแแแแต แขแซแแต แจแแฐแฅ แแฅแญ แซแตแแแแแข แฐแแ แ แฅแ แ แแแแญ แ แแต แ แญแแต แแฎแถแฎแ แฅแจแฐแแแฉ แแแแธแแ แแจแแแฅ แฅแแแแแแแข แ แ แแแแฝ แแซแจแ แซแแแ แแแแแต แแแ แจแฝ แจแแจแฐแแแ แญแแ แฅแแแ แก-
case class TcpEndPoint[Protocol](node: NodeId, port: Port[Protocol])
แจแต Port
แฅแป แแแข Int
แ แฐแแแฐแ แญแแ แแตแฅแก-
type PortNumber = Refined[Int, Closed[_0, W.`65535`.T]]
แจแฐแฃแฉ แแญแแถแฝ
แญแแแจแฑ Int
แจแแฐแฅ แแฅแญแ แแแญแ แจแแฝแ แฃแ 16-แขแต แฅแดแถแฝ แฅแป แฅแแฒแแซแธแ แฐแแ
แถแแณแแข แแแ
แแ
แจแต แ แแซแจแฅ แญแ
แแ แคแฐ-แแฝแแแต แแแ แแ แแแ แแตแแญแต แจแแแข แแญ แ แฃแ แฅแฉ แจแแตแแ แญแแตแแแข
แแคแฝแฒแฒแ (REST) โโแฅแแ แจแ แแแแแฑแ แแแแต แแแแแ แฅแแฝแแแแก-
type UrlPathPrefix = Refined[String, MatchesRegex[W.`"[a-zA-Z_0-9/]*"`.T]]
case class PortWithPrefix[Protocol](portNumber: PortNumber, pathPrefix: UrlPathPrefix)
แจแแแฐแ แแญแแต
แ แแ แแแญ แแ แแฎแถแฎแแ แแแแจแต แจแ แญแแต แญแญแญแญแ แจแแแ
Scala แฃแ
แชแ แฅแจแฐแ แแแ แแแข Protocol
แ แญแแ แแตแฅ แฅแ
แ แแญ แจแแญแแ. แจแแฃแ แแแญ แแแข แจแแแฐแ แแญแแต. แ แแฐแต แแญ แจแแฎแถแฎแ แแแซ แแณแ แฅแแฅแแ แ แซแตแแแแแแฃ แแแซแ แแ แจแแแจแแฝแแข แ แแ แแแญ แแ แญแ
แแแฐแ แแญแแต แฐแจแแช แแญแแต แฐแ
แแแตแ แญแฐแฃแแข แ แฐแณแณแฐ แแฎแถแฎแ แแฐแฅ แแแ แ แแฝแแแข
แ แฅแแต แฅแ แ แแญ แจแแแต แแฎแถแฎแแฝ แ แแฑ REST API แจJson แฐแจแณแณแญแแต แแญ แแแก-
sealed trait JsonHttpRestProtocol[RequestMessage, ResponseMessage]
แจแต RequestMessage
แฐแแ แ แแฐ แ แแแแญ แแแญ แจแแฝแแธแ แแฐแจแณแ แจแแแฅแญแต แ แญแแต แแแข ResponseMessage
แจแ แแแแญ แแแฝ แแแฅแญแต แแแข แ แฅแญแแฅ แจแแแแแต แแฎแถแฎแแ แ แแแแแ แตแญแญแแแแต แจแแแแน แแแฝ แจแแฎแถแฎแ แแแแซแแฝแ แแแแฅแญ แฅแแฝแแแแข
แแแ แแฅแ แแแ แแแ แซแ แจแแฎแถแฎแแ แตแชแต แฅแแ แแแแแก-
sealed trait SimpleHttpGetRest[RequestMessage, ResponseMessage]
แ แแ แจแแฎแถแฎแ แฅแซแ แแแฅแญแต แ แฉแ แญแคแ แแญ แฐแซแญแแ แฅแ แจแแแฝ แแแฅแญแต แฅแแฐ แแแฝ แแฅแจแแแ แญแแแณแแข
แจแ แแแแแต แแ
แญ แ แ แแแแแต แตแแฃ แ แแฐแฆแฝ แตแฅแตแฅ แฅแ แ แ แแณแแต แฅแแแฝ แแแแฝ แญแฝแแแข แ Scala แแตแฅ แฅแแแ
แ แแ แ แซแแต แฅแแดแต แแแจแ แฅแแฐแแปแ แฅแแต แแแ แจแแฝแ แแแแถแฝ แ แ (แแแณแแฃ HList
, แ แแแฅแซ แแแฅ แ แญแแถแฝ). แแแ
แแฅแ แแแ แจแฌแญ แแฐแญแ แฅแแ แแแแ แฅแ แแฃแแฉ แจแแฝแ แแญแฅแซแฎแฝแ (แแแแฝแ) แฅแแฐ แฃแ
แชแซแต แฅแแแญแแแแข (แจแฌแญ แแฐแญแ แแแ
แจแฐแแแ แจแแ
แจแต แ แแซแจแฅ แแตแแญแต แ แญแฐแแแก แจแแณแก แฐแแฃแซแ แแแ แจแแฝแ แ แแต แฅแป แแแข)
แฅแแแฝ แจแฌแญ แฅแแตแ แฅแแฐ แแแฝ แ แแแแฝ แจแแจแจแป แแฅแฆแฝแ แ แแ แแ แแแจแ แญแฝแแแก
type EchoProtocol[A] = SimpleHttpGetRest[A, A]
trait EchoConfig[A] extends ServiceConfig {
def portNumber: PortNumber = 8081
def echoPort: PortWithPrefix[EchoProtocol[A]] = PortWithPrefix[EchoProtocol[A]](portNumber, "echo")
def echoService: HttpSimpleGetEndPoint[NodeId, EchoProtocol[A]] = providedSimpleService(echoPort)
}
แจแขแฎ แ แแแแแต แจแแซแตแแแแ แแฐแฅ แจแฐแแแจ แฅแป แแแข แฅแแ แญแ
แแฐแฅ แจแขแฎ แแฎแถแฎแแ แจแแฐแแ แแแแ แฅแแแแแแข แ แแ
แแ แจแฐแแจ แแฐแฅ แแแแฝ แฅแแฐแแซแตแแแแ แแฅ แญแ แแฃ แแญแแซแฑแ แฃแ
แชแ แจแ แฅแตแตแซแญแต แแดแแฝ แแแแซแแฝแ แญแแ
แณแแข แจแ แฅแตแตแซแญแต แแดแแฝแ แจแฐแ แแแ, แฎแแแแฐแญ แ แแแแญ แแณแ แแตแฅ แตแแ แซ แซแตแแแแแ. แฅแแ
แ แฐแแฃแ แฉแ แ แ
แญแ แแ (8081
) แฅแ แ แฎแแญแชแต แแ
แจแต แแตแฅ แจแแแแ แฅแแฐ แแฃแช แฅแดแต แฅแ
แ แแญ แญแแแ.
แ echo แ แแแแแต แฐแแ แ แแ แญ แแญ แฅแแแแตแ แแแ แฅแแฝแแแแก-
trait EchoClientConfig[A] {
def testMessage: String = "test"
def pollInterval: FiniteDuration
def echoServiceDependency: HttpSimpleGetEndPoint[_, EchoProtocol[A]]
}
แฅแแแแต แแญ แฅแแฐ แ แแต แ แญแแต แแ echoService
. แ แฐแแญแ แฐแแณแณแญ แแฎแถแฎแ แญแ แญแแ. แตแแแ
, แฅแแแ
แ แแแต แฅแแแฝ แซแแแแ แ แตแญแญแ แฅแแฐแแฐแฉ แฅแญแแ แ แแแ แฅแแฝแแแ.
แ แแแแแถแฝ แตแแ แซ
แ แแต แ แแแแแต แแแแแญ แฅแ แ แธแ แแแแแต แฐแแฃแญ แซแตแแแแแแข (แ แแแแแตแ แจแแแแต แฝแแณ แแแจแซ แแณแ แแแข) แ แตแแ แฅแแฒแ
แแญแแฑแ แฐแแฃแญ แแฐแแฐแ แแ
แจแต แจแแแแฝ แฅแแต แ แแซแฎแฝ แ แ (แแแณแแฃ แจแ แญแแต แญแแแฝแ แแแ แแ แฅแแฝแแแ)แข แแแ
แแฅแ แฅแแฐแแ แจแฌแญ แแตแ แฅแแ แแแแแข แฐแ แ
แแ แ แแแแแตแ แแแจแ แฅแแฝแแแ cats.Resource
แแตแแแแ แ
แแ แฅแ แจแแฅแจแต แแแแ
แ แซแแญแฃแแข แแฅแต แแแแแต แแ
แญ แฅแ แ แแณแแต แจแฉแซ แแ แ แแต แแ
แจแฅ แ แแฅแแข แตแแแ
แจแ แแแแแฑ แแแป แฐแแฃแญ แจแแจแฐแแแ แแแตแ แญแฝแแ-
type ResourceReader[F[_], Config, A] = Reader[Config, Resource[F, A]]
trait ServiceImpl[F[_]] {
type Config
def resource(
implicit
resolver: AddressResolver[F],
timer: Timer[F],
contextShift: ContextShift[F],
ec: ExecutionContext,
applicative: Applicative[F]
): ResourceReader[F, Config, Unit]
}
แจแต
Config
- แ แแ แ แแแแแต แ แตแแแช แจแแแแแ แจแแ แญ แแญแแตAddressResolver
- แจแแแฝ แ แแแแฝ แตแญแญแแ แ แตแซแปแแฝแ แจแแแแต แฝแแณ แซแแ แจแฉแซ แแ แแแญ (แแแญแแฎแฝ แแแ แฅแแ แญแแฅแ)แข
แแแฝ แแญแแถแฝ แจ แจแแก แแธแ cats
:
F[_]
- แจแแคแต แ แญแแต (แ แแแ แแแณF[A]
แแตแแ แแแ แญแฝแแ() => A
. แ แแ แฝแแ แแตแฅ แฅแแ แแแแcats.IO
.)Reader[A,B]
- แแ แแต แฐแแฃแญ แฅแ แแญแ แซแแฐ แฐแแณแณแญ แแ แแแขA => B
cats.Resource
- แจแแแแต แฅแ แจแแแแแซ แแแแถแฝ แ แแตTimer
- แแแฐแแต / แแแ แแแแซแต แซแตแฝแแContextShift
- แ แแแ แจExecutionContext
Applicative
- แ แฐแแฃแญ แแญ แซแ แฐแแฃแซแต แแ แ แแซ (แแแต แแแต แญแปแแ) (แ แแจแจแป แ แแ แแแญ แแฐแซแต แฅแแฝแแแ)
แญแ แแ แ แญแแแฝ แ แแ แแ แฅแแต แ แแแแแถแฝแ แแฐแแ แญ แฅแแฝแแแแข แแแณแแฃ แแแ แจแแซแฐแญแ แ แแแแแตแก-
trait ZeroServiceImpl[F[_]] extends ServiceImpl[F] {
type Config <: Any
def resource(...): ResourceReader[F, Config, Unit] =
Reader(_ => Resource.pure[F, Unit](()))
}
(แฐแแแจแต
แแตแแแ แแแแต แฅแแต แ แแแแแถแฝแ แจแแซแซแแต แแ แ แแแญ แแ (แจแแฅแต แฐแแฐแแต แแแแญ แ แฌแญ แแตแ แจแแ แแ)
object SingleNodeImpl extends ZeroServiceImpl[IO]
with EchoServiceService
with EchoClientService
with FiniteDurationLifecycleServiceImpl
{
type Config = EchoConfig[String] with EchoClientConfig[String] with FiniteDurationLifecycleConfig
}
แ แแตแแแ แแแแต แ แแ
แแตแแแ แแแแต แจแแซแตแแแแแ แตแญแญแแ แจแแ
แญ แ แญแแต แฅแแแแแแ. แฎแแแแฐแญ แฅแแแ (แฌแญ) แ แ แฃแแแ แ แญแแต แฅแแตแแแแฃ แ แญแแ
แตแแแแฃ แแญแแซแฑแ แฅแซแแณแแฑ แจแ แแแแแต แฃแ
แช แ Config
แแญแแต. แฅแแฒแแ แจแฐแแ แแ
แจแต แณแแแญแฅ แแตแแแ แแแแต แแแแญ แ แแฝแแแข
แจแแตแแแ แ แตแซแป แฅแซแต
แแแแแต แแแแตแจแต แแฅแซแแณแแฑ แแตแแแ แแแแต แฅแแแฐแ แ แตแฐแแแ แ แตแซแป แฅแแแแแแแข แจแแแฝ แจแแแแชแซแ แญแแแฝ แ แแ แแณแแ แญแฝแแแข แตแแแ แฃ แ แแต แแณแแแซ แฅแ แ แตแญแญแแ แ แตแซแปแ แแซแจแ แซแญแณ แจแแแฐแฅแ แต แแแแต แฅแแแแแแแข แญแ แซแญแณ แตแซ แฐแแฃแญ แแแก-
case class NodeAddress[NodeId](host: Uri.Host)
trait AddressResolver[F[_]] {
def resolve[NodeId](nodeId: NodeId): F[NodeAddress[NodeId]]
}
แฅแแฐแแ แ แญแแต แฐแแฃแญ แแแฐแแ แญ แฅแแต แแแ แจแแฝแ แแแแถแฝ แ แ.
- แจแแฐแแซแฑ แ แแต แตแญแญแแ แ แตแซแปแแฝแ แซแแ
แ แฃ แ แแตแแแ แ แตแฐแแแ
แ
แฝแ แต แฃ แจแแซ แจ Scala แฎแตแ แจแตแญแญแแ แ แตแซแปแแฝ แแญ แแแแจแต แฅแ แ แแ แแแฃแณแแ แแซแแต แฅแแฝแแแ (แญแ
แ แจแฐแแต แผแฎแฝแ แซแ แแ
แซแ แฅแ แจแแซ แจแแ
แฐแต แแจแซ แตแฅแตแฅแ แซแซแแณแ)แข แ แแ
แ แแฃแ แจแซแญแณ แตแซแ แฝแ แ แตแณแฒแตแฒแญแต แจแแณแแ
แฅแ แแแณแฐแแต แแแ แแแ แญแฝแแแข
Map[NodeId, NodeAddress]
. - แ แแณแแต แแ แตแญแญแแ แ แตแซแปแแฝแ แจแแแแแ แแตแแแ แแแแฑ แ แตแญแญแ แฒแแแญ แแญแ แแ แซแแฐแแแฉ แจแ แแแแฝ แ แตแซแปแแฝ แจแแแแข แ แแ แ แแฃแ แจแแแ แ แแแแฝ แ แแต แจแฐแแแจ แจแแแต แ แแแแแต แแแจแ แญแฝแแ แฅแ แฅแซแแณแแฑ แแตแแแ แแแแต แ แแซ แ แแแแแต แแตแฅ แ แตแซแปแแ แแซแตแฐแแแ แฅแ แแฅแแแแฝ แแแแแฅ แญแฝแแแข
- แแปแปแ แจแปแแ
/etc/hosts
แฃ แ แตแแตแ แจแฐแแแน แจแ แตแฐแแแ แตแแฝแ แแ แแ แฅแแฝแแแ (แฅแแฐmy-project-main-node
แecho-backend
) แฅแ แญแ แ แตแ แ แแฐแแซแต แแ แจแ แญแ แ แตแซแป แแญ แฅแป แซแแแแตแข
แ แแ
แแฅแ แแตแฅ แฅแแแ
แ แแณแฎแฝ แ แ แแ แแญแแญ แ แแธแแแธแแแข แ แฅแแแฑ แ แ แปแแแแณแฝแ แแณแ แแตแฅ แแแ แ แแแแฝ แ แแต แ แญแแต แ แญแ แ แตแซแป แญแแซแธแแ - 127.0.0.1
.
แ แแ แแฅแ แแตแฅ แแแต แจแฐแจแแแ แจแตแญแแต แ แแแแฆแฝแ แฅแแแแจแณแแแก-
- แแ แ แแตแแแ แแแแต แ แแแแฅแฃ แแแ แ แแแแแถแฝ แ แแ แ แแตแแแ แแแแต แแญ แจแแแแกแ แตแข
- แแแต แแตแแแ แแแแต แ แแแแฅแฃ แ แแแแแต แฅแ แฐแแ แ แ แฐแแซแฉ แ แแแแฝ แแญ แซแแ แตแข
แแ
แญ แ
แแ แ แแตแแแ แแแแต แแ แญ
object SingleNodeConfig extends EchoConfig[String]
with EchoClientConfig[String] with FiniteDurationLifecycleConfig
{
case object Singleton // identifier of the single node
// configuration of server
type NodeId = Singleton.type
def nodeId = Singleton
/** Type safe service port specification. */
override def portNumber: PortNumber = 8088
// configuration of client
/** We'll use the service provided by the same host. */
def echoServiceDependency = echoService
override def testMessage: UrlPathElement = "hello"
def pollInterval: FiniteDuration = 1.second
// lifecycle controller configuration
def lifetime: FiniteDuration = 10500.milliseconds // additional 0.5 seconds so that there are 10 requests, not 9.
}
แฅแแ
แแแฑแแ แจแ แแแแญ แฅแ แจแฐแแ แ แแ
แจแตแ แจแแซแซแแ แแ แ แแ
แญ แฅแแแฅแซแแแข แฅแแฒแแ แ แฐแแแถ แฐแแ แแ แฅแ แ แแแแญแ แจแแ แจแแซแแญแฅ แจแ
แญแแต แกแฐแต แแแฃแ แชแซแ แฅแแแ
แซแแ lifetime
แญแแฐแต แซแแแ.
แฐแแณแณแญ แจแ แแแแแต แตแแ แซแแฝ แฅแ แ แแแแฎแฝ แจแตแญแแต แ แแแแฅ แ แแแต แจแฐแแซแฉ แ แแแแฝ แแแแ แญ แฅแ
แ แแญ แแแ แญแฝแแแข แแแ แญ แฅแป แ แแฅแ
แแแต แ แแแแฝ แแ แญ
object NodeServerConfig extends EchoConfig[String] with SigTermLifecycleConfig
{
type NodeId = NodeIdImpl
def nodeId = NodeServer
override def portNumber: PortNumber = 8080
}
object NodeClientConfig extends EchoClientConfig[String] with FiniteDurationLifecycleConfig
{
// NB! dependency specification
def echoServiceDependency = NodeServerConfig.echoService
def pollInterval: FiniteDuration = 1.second
def lifetime: FiniteDuration = 10500.milliseconds // additional 0.5 seconds so that there are 10 request, not 9.
def testMessage: String = "dolly"
}
แฅแแแแฑแ แฅแแดแต แฅแแฐแแแ แ แญแแแจแฑแข แจแแแแ แแตแแแ แแแแต แจแแจแ แแ แ แแแแแต แฅแแฐ แจแ แแ แแตแแแ แแแแต แฅแแแแต แฅแแ แ แณแแแข แจแฅแแแ แ แญแแต แจแฐแจแแแ แ แแฎแถแฎแแ แจแแแแฝ แจแแแฐแ แ แญแแต แตแแแ แแแข แฅแ แ แแฐแต แแญ แตแญแญแแแแ แจแแต แแณแแแซ แญแแจแแแข แญแ แจแณแแฐแ แจแแ แญ แ แแซแจแฅ แ แตแแแ แแฝแณแแฝ แ แแฑ แแ. แแฐแฅ แ แแต แแ แฅแป แจแแแแแต แฅแ แตแญแญแแแแ แแฐแฅ แฅแซแฃแแตแ แแแแ แแแจแแแฅ แจแแซแตแฝแ แ แ แ แญแฐแ แแแข
แแแต แ แแแแฝ แตแแ แซ
แแแ แแ แญ แ แตแญแญแ แฐแแณแณแญ แ แแแแแถแฝแ แฅแแ แแแแ. แแแ แแแฅ แจแแแข แแแญ แแแฃ แจแฐแแซแฉ แจแ แแแแแต แตแฅแตแฆแฝแ แซแซแฐแฑ แแแต แจแฐแแซแฉ แจแแตแแแ แแแแถแฝ แ แฐแแฃแ แญแ แฅแแแฅแซแแแก-
object TwoJvmNodeServerImpl extends ZeroServiceImpl[IO] with EchoServiceService with SigIntLifecycleServiceImpl {
type Config = EchoConfig[String] with SigTermLifecycleConfig
}
object TwoJvmNodeClientImpl extends ZeroServiceImpl[IO] with EchoClientService with FiniteDurationLifecycleServiceImpl {
type Config = EchoClientConfig[String] with FiniteDurationLifecycleConfig
}
แจแแแแชแซแ แแตแแแ แแแแต แ แแแแญแ แจแแฐแแ แญ แฒแแ แจแ แแแแญ แแ แแแแญ แฅแป แแ แจแแซแตแแแแแข แแแฐแแ แแตแแแ แแแแต แฐแแ แแ แจแแฐแแ แญ แฒแแ แแ แจแแแแญ แญแแ แซแตแแแแแแข แแแฑแ แ แแแแฝ แจแฐแแฐแ แจแ
แญแแต แแแ แแญแแญ แซแตแแแแธแแแข แแแ
แจแแตแณ แ แแแแแต แแตแแแ แแแแต แ แแ แแ แแแจแฅ แจแแฝแ แแแแซ แจแแแ แจแ
แญแแต แแแ แญแแจแแ SIGTERM
, แจ echo แฐแแ แ แจแฐแแแจ แจแแจแจแป แแญแณ แ แแ แซแ แแแข แญแแแจแฑ
แ แ แแแญ แจแฅแตแแต แแฐแต
แญแ แ แซแแต แจแแ แจแต แแญ แจแแแฐแซแ แตแ แแแแต แฅแแดแต แฅแแฐแแแแฅ แฅแแญแข
แฅแแฐ แฎแต แแแแฉ แฐแฐแฅแตแฆ แ แแต แ แญแต แญแ แซแแข แจแแ แจแต แ แญแถแฝแ แจแแแฝ แจแฎแต แ แญแถแฝ แแแจแต แแญแแซแณแ แญแแตแแแข แฅแแแ แแ แ แฐแแณแณแฉ แฎแต แแ แจแต แแญ แฅแ แแ แฎแฝ แแแจแ แญแฝแแแข แฅแ แ แฅแญแแฅ แฃ แจแฐแแซแฉ แจแแ แจแต แ แญแแซแแฝ แ แญแซแณ แตแชแถแฝ แแแฉแ แญแฝแแแข แ แ แแต แแ แญ แแตแฅ แจแฐแแฐแ แจแคแฐ-แแปแ แแต แตแชแถแฝแ แแแจแฅ แฅแแฝแแแ แฅแ แญแ แ แแ แญ แฃแตแแแฅแ แแฅแญ แญแ แแ แแ แญแแซแแข
แจแแ แจแต แแแฅ แจแฎแต แแแฅ แญแแแแข แตแแแ แ แฐแแณแณแญ แจแฅแซแต แแจแแแซ แแฐแต แแธแแ แ แแ แตแก-
แฒแฌแต -> PR -> แแแแ -> แแ แฐแต -> แแฃแญแแต แซแแ แแ แฐแต -> แแฃแญแแต แซแแ แแฐแแซแต
แจแ แแซแจแฅ แแดแแฝ แจแแจแฐแแต แแคแถแฝ แ แ.
- แแ แฉ แแ แแต แจแฐแแฐแ แจแตแญแแต แแณแ แแฅแแต แซแแ แแแข แ แ แแแแฝ แแซแจแ แตแญแญแ แซแแแ แแแแแต แแแแ แญ แแแ แแแแต แซแ แ แญแแตแแแข
- แ แ แแต แแตแแแ แแแแต แแตแฅ แแ แจแตแ แแแจแญ แแแ แ แญแฐแแ. แ แแณแแต แจแฝแแ แแญแแฝแ แแฐ แแตแฅ แแแแฃแต แฅแ แแแแแฅ แแญแแซแณแ แซแแแ แญแแตแแ. แตแแแ แจแแ แจแต แแแธแซแฐแต แ แแตแฐแ แญแแแแข
- แ แแตแฐแ แจแแ แจแต แแแฆแฝแ แแตแจแ แแแ แ แญแฐแแ.
- แ แฅแแแแน แจแแ แจแต แแแฆแฝ แฐแแณแณแญ แจแฅแตแแต แแฐแตแ แญแจแฐแแแฃ แฅแ แจแฐแแฐแ แแแแแ แซแแแแข
แแแญแต แแ แญ แจแฐแแจ แแจแแป แซแตแแแแแ? แจแแญแต แ แแแแฉ แฅแ แฐแแฝ แฅแแณแญแฐแญแฑแ แต แแแฐแญแแ แจแแแแแแแ แแตแฅแซแแแต แซแแ แแจแ แแญแ แญแฝแแแข แตแแแ แจแแญแต แ แแแแฉแ แจแแซแซแตแต แจแฐแแฐแ แแณแจแป แซแแ แจแฐแแจ แแจแแป แแตแแแฅ แ แแ แแแ แญแฝแแแข แ แแแแฉแ แ แแแต แญแแแฝ แแแจแแแ แฅแแฝแแแ-แ แแฐแแ แ แฃแ แญแแต แจแแ แจแแญแต แแแชแซแแฝแ แจแซแ แฅแ แจแแ แจแต แแตแฅแซแ แญแแ แจแซแแข แญแ แแ แฅแแแแน แแแขแแฝ แแ แฅแแแน แแแแแแฝ แแณแจแต แซแตแฝแแแฃ แแแญ แแ แจแฅแแแฐแ แฅแแแแ แจแแแตแฅ แแแข แ แแฃแช แจแแแชแซ แฅแดแถแฝ แ แแซแแแต แแซแจแแ แฃแ แชแซแตแ แ แแ แแ แญแ แแ แแจแแแ แแแ แแแข
แแฉแแถแฝ
แจแแแฝ แจแแ แจแต แ แตแฐแณแฐแญ แดแญแแฎแฝ แแญ แฒแแณแฐแญ แจแณแแฐแ แ แซแแต แฅแ แแแ แแณแฑแ แฅแแญแข
แ แแแแชแซ แฐแจแแฃ แแ แจแตแ แแแตแฐแแแต แ แณแแฐแ แแแแต แแฐแแซแฉ แแฝแณแแฝ แฅแแต แ แแซแฎแฝแ แฅแแแจแแซแแแข
- แ แแแแ แแฝแ แแญ แจแฝแแ แแญแ.
- แจแฐแแจแ แแแ-แฅแดแต แแจแแป (แฅแแฐ
etcd
/zookeeper
). - แฅแแฐแแ แณแญแแแญ แฅแแฐแแ แแแแฉ/แแแแฉ แจแแฝแ แแแต แจแแฐแต แญแแแฝแข
- แจแ แญแต แฅแ แจแตแชแต แแฅแฅแญ แแญ แแแแญแข
แจแฝแแ แแญแ แจแ แต-แแญ แฅแแแแฝ แ แแแญ แ แแณแแต แฐแแแแญแแตแ แญแฐแฃแแข แจแตแญแแต แ แตแฐแณแณแช แแฐ แขแแแ แแตแแแ แแแแต แแแฃแตแฃ แแแฅ แแตแจแ แฅแ แ แแแ แ แแแแแฑแ แฅแแฐแแ แแตแแแญ แญแฝแแแข แญแ แแตแแแ แตแญแแถแฝ แฅแฉ แแญแแ แญแฝแแ. แจแแแก แ แตแฐแแญแฃ แแแ แฑแซ แ แแแจแแข แแแก แ แแ แฅแแต แแญแแฝ แ แญแแแแแ. แจแแแกแ แแแตแค แแ แฅแแฐแแ แแแแ แ แตแธแแช แแแ แญแฝแแแข แ แแฐแแฐแแแข แจแฐแจแแแแ แจแตแญแแต แฅแญแณ แ แแต แ แตแฐแณแณแช แ แแแน แ แแแแฝ แแตแฅ แซแแแ แแ แจแต แแแแ แ แแแ แแจแณ แญแฝแแแข
(Btwแฃ แแ แ แตแฎ แจแฝแแ แแแแญ แแญแแฝแ แแ แแ แแแแญ แจแแซแตแแแ แจแแแฃ แซแแ แแแฅแญ แจแแฝแ แฐแแณแ + แ แจแแแญ แแจแ แฅแป แ แแฅแแข Config
แญแฐแญแก แฅแ แซ แจแฝแแ แแ
แฎแฝแ แแ แแ แแแแแญ แ แ แแแข แญแ
แฐแแ แจแแ แแแญ-แแ แแ
แญ แแตแฅแตแฅแแต แจแฝแแ-แฐแฎแญ แแ
แฎแฝ แแตแฅแตแฅแแต แตแแฝ แซแแฐ แแแแ แซแณแซแแฃ แแญแแซแฑแ แ แฝแแ แแญ แจแฐแแ แจแฐ แฅแชแต แ แแณแแต แฐแจแแช แฎแต แฅแแแแแแแข)
แจแฐแแจแ แแแ-แฅแดแต แแจแแป แจแแฐแแ แชแซ แแณ แแแชแซแแฝแ แแแฐแซแจแต แฅแฉ แแด แแแข แฅแแ
แฅแแฐ แจแแ
แญ แฅแดแถแฝ แจแแแแฅแซแธแแ แฅแ แแแฅ แฅแป แแ แฅแแฐแแ แแฐแฅ แ แแฅแแข แฐแแฃแญ แฐแฐแฅแทแแข C => A => B
แฅแ แแ แจแแญแแแแก แฅแดแถแฝ แฅแแ แฅแแ แซแธแแแ C
"แแแแญ"แฃ แ แฐแฐแแแ แแแฅ แฒแแจแญ A
- แแแฅ แฅแป แซแตแแกแข แแ
แญ แจแแจแแ แแฐแ แฅแ แแฐแแฃแฉ แแ
แจแฅ แ แแ แตแข A
. แญแ
แ แแณแฅ แตแแแแจแต แจแแ
แญ แแแฅแ แจแแแฅ แแแแจแต แแ แฅแ
แ แแญ แฅแแฐแแแ แจแแ แ แแ แตแแแแฝ แแ แแแต แฅแแฝแแแแข แฅแแฒแแ แแแฅ แ แฐแแแถ แจแ แแต แแแญ (แฐแ แแ) แฅแ แแ
แจแต แจแแแฃแ แจแแ แแแญ (แ แตแฐแณแณแช) แแแข แจแแแปแ แแฐแต แ แแ แแแแก แจแแฝแ แแแชแซแแฝแ แแตแฐแแแต แจแแฐแแ แชแซแแ แแตแฅแตแฅแแต แแจแแญ แซแแฃแ. แแฅแแฐแแ
แ แญแแต แแแแแแฝ แจแแแชแซ แตแแณแธแแแฃ แแฐแแฐแ แฅแ แแจแแแฅแฃ แจแฐแณแณแฑ แฅแดแถแฝแ แแตแฐแแแต แ แแฅแแข แตแแแ
แจแแฎแแซแแ แแตแฅแตแฅแแต แแแแแต แ แแฐแต แแญ แแแแก แจแแฝแแตแ แแแชแซแแฝ (แแญแ แแ แ แแ แแตแแจแต) แฅแแแแต แญแปแแแข
แจแแ
แแฅแ แ แแแญ แ แแ แฅแ แฐแแแแญ แแแชแซแแฝ แแซแจแ แแฉแแต แแแ แญ แ แแฅแแข แจแ แแแแแต แ แแญแแฎ แ แแฐแต แแ แจแ แแณแแต แแคแถแฝแ แฅแญแ
แแแฅ แจแแแแ แจแแ แฐแแแแญ แแแชแซแแฝ แแแแธแ แฅแแฝแแแแข แ แแ แแแซ แฅแแฑ แจแแญแแแณแแฑ แแธแ แฅแ แจแณแแฐแแ แ แซแแต แ แแ แแ แแแแฉ แญแฝแแ. แแฐแแแแญ แแแถ แแแแญ แแแฝ แ แซแแถแฝ แแซแตแแแ แญแฝแแแข แแแณแแฃ แจแตแญแ แฑ แญแแแฝ แจแฐแจแแแ แตแญแแตแ แจแฐแแซแฉ แแฐแถแฝแ แฅแแฐแแ แแแตแแแญ แ แฐแแณแณแญ แแแฉ แ แ แฒแฑ แจแแ
แญ แแแชแซแแฝ แฅแแฐแแ แแแแฉ แญแฝแแแข
(แจแฅแ แตแแต แ แตแฐแซแจแต แจแตแญแแฑแ แแตแฅแตแฅแแต แตแแแจแแญ แจแฉแซ แแ แณแแ แแแแญแ แแตแแแต แแแข
แฅแแฐแแ แจแแตแแแญ แแฐแถแฝแ แ แตแญแแฐ แญแแ แตแแ แแญ แฅแป แแฐแแแ แจแ แแ แแแ แแแ แญแฝแแแข แแแ แฅแแณแ แแแแ แแญแแ แญแฝแแ.)
แ แแณแแต แแ แฐแแฝ แฐแแแแญ แแ
แญ (แซแ แแแฝ แแญแแซแถแฝ) แฐแแแแญ แแ
แญ แฅแแฒแซแตแก แจแแซแฐแญแ แจแแญแแแณแแต แแ
แจแตแ แจแแ แแ แ แแฑ แ แตแแแ แแฝแณ แ แแ
แจแต แแปแปแซ แแ
แต แจแ แแแแแต แแแจแฅ แแแข แ แฅแญแแฅ แ แตแณแฒแญ แแ
แจแต แแญ แแแฆแฝแ แแตแจแ แซแแฅแ แ แณแฒแต แฅแดแถแฝ แแคแณแ แฅแแฒแแ แตแญแแฑแ แฅแแฐแแ แแตแแแญ แ แแฅแแข แแฐแแซแฉ แตแญแแถแฝ แจแฅแจแแต แแ แแตแแญแถแฝ แญแแซแซแ, แตแแแ
แซแ แซแ
แ แแณแ แแญแแ แญแฝแแ. แ แตแแแ แจแแ, แแแแแแ แตแญแแต แฅแแฐแแ แฅแแฒแแแญ แ แตแแตแแ แแแต แ แแฅแ. แแแณแแฃ แแฐแแ แญ แฅแแฝแแแ
แ แ แชแฐ แ แซแ แแตแฅ แแญแ แ แแญ แแ แญ แตแแแแจแตแต? แแ แญแ แ แ แญแต แแตแฅ แแแจแต แแแต แ แ แฅแแแแน แแแณแแฝ แญแ แแ แญ แจแแแฝ แ แญแถแฝ แแญ แฐแแณแณแญ แจแฅแซแต แแจแแแซ แแฐแต แ แแ แแแต แแแข แตแแแ แ แแต แฐแ แ แแแแฉ แฅแฉ แฅแซแต แซแแ แฅแ แฅแแแต แจแแฃแแ แต แแแแ แฅแญแแ แ แแแ แญแฝแแ. แ แฐแแซแแ แแ แญ แ แฐแแจ แแญแ แแตแฅ แแ แฅแ แแแ แ แแซ แแญแ แแญ แแแฆแฝ แฅแแณแฐแจแ แแแ แฑแซแแฝ แจแแ แแแต แแแข แญแ แ แตแแแ แแ? แแ แฅแแแแน แจแแญแต แตแญแแถแฝ แจแฐแจแแ แฅแ แจแแฐแ แฅแซแต แซแแ แแ แญ แขแแจแ แญแปแแ แฅแแ แฅแแแแแแข
แจแ แชแฐ แ แซแ แฅแชแต แแผ แฅแแฐแฐแแ แจแฃ แแ แแญแแต แฅแดแถแฝแ แฅแแฐแซแแฃ แแ แ แญแแต แฃแ แชแซแต แฅแแฐแแ/แฐแฐแแจแแฃ แ แแแแฉ แแญ แฅแซแแณแแฑแ แแแฅ แจแแตแจแ แแแแแต แจแแ แจแ แแ แฅแแฐแแ แแแแ แซแตแฝแแแข แ แ แญแต แแตแฅ แแ แญ แแแแจแต แจแฐแแฐแ แฅแจแต แแ แญแ แญแฝแแ แฅแ แจแแตแ แแญแซ แแแข
แฅแ แแฝ แฅแ แแณแถแฝ
แฅแแ แ แแณแแต แฅแ แแฝแ แแแแต แฅแ แจแณแแฐแ แ แซแแต แ แแณแแต แแณแถแฝแ แแแซแจแต แฅแแแแแแแข
แฅแ แแฝ
แจแฐแ แแแ แจแฐแจแแแ แตแญแแต แจแฐแแแฐ แแ แญ แฃแ แชแแฝ
- แจแแญแแแณแแต แจแแแแชแซ แแฐแปแข แญแ แจแแฐแ แ แซแต แจแแฐแแแ แตแแตแ แญแฐแฃแ แฃ แญแ แ แ แแแแฉ แตแญแญแ แแ แจแแญแแต แแฐแฆแฝแข
- แจแ แแธแ แจแแแแญ แแแแข แ แฐแแแถ แแแฝ แจแแแแญ แ แแซแจแฆแฝ แ แ แฅแแแแน แฐแแแแญ แแตแญ แฅแป แจแฐแแฐแก แแธแแข
Scala แ แ แแ แแ แแ แจแตแ แจแฐแปแ แแแตแจแ แฐแ แจแแแ แฃแ แชแซแตแ แแ แแ แญแฝแแแข แแแณแแฃ แแฃแช แฅแดแถแฝแ แแแ แจแฅ แฃแ แชแซแตแ แแ แแ แฅแแฝแแแแฃ แจแฐแแซแฉ แแฐแ แแแแแแต แฅแแแฝแแฃ แแแ แ แต แฅแแฝแแแval
แ แแซแ แแฐแ (DRY) แ แแต แแ แฅแป แญแแแปแแข แแฅแฐแ แ แฐแ แฐแจแฐแแฝแ แแญแ แจแฐแแฐแ แญแแแฝแ (แ แฅแแถแฝแ) แแ แแ แญแปแแ (Seq
,Map
, แแแฐ.). - DSL Scala แ DSL แธแแแแฝ แฅแฉ แตแแ แ แแแข แจแแจแจแปแ แแ แจแต แขแซแแต แ แแซ แฐแ แแแแฝ แแแ แฅ แจแแฝแ แฅแแฒแแ แฅแแแ แ แฃแ แชแซแต แจแ แแ แแน แฅแ แแแ แฐแ แแ แฐแตแแ แจแแ แจแแ แญ แแแ แแแแตแจแต แฅแแแ แ แฃแ แชแซแต แแ แแ แญแฝแแแข
- แ แ แแแแฝ แแญ แณแแแแต แฅแ แแฅแแตแข แแ แ แแแ แจแฐแจแแแแ แตแญแแต แ แ แแต แฆแณ แแญ แแแแญ แจแแซแตแแแธแ แฅแ แแฝ แ แแฑ แแแ แฅแดแถแฝ แ แแต แแ แ แฅแฅแ แจแฐแแแน แฅแ แฅแ แ แแแแแแธแ แฆแณแแฝ แแ แฅแแฐแแ แฅแ แ แแญ แแแ แ แแฃแธแแข แฅแแฒแแ แฐแ แแแฑ แจแฐแ แ แ แแฐแฅ แแแแซแแฝแ แญแฐแญแก แ แแแ แตแญแญแแ แ แแแแฎแฝ แจแตแญแแฑ แ แแแแฝ แ แแต แ แญแแต แแแ แฅแแฐแแแแฉ แซแจแแแกแข แ แแณแแต แ แแแแแถแฝแ แแตแ แตแ แแแญแณแต แ แตแธแแช แจแแซแฐแญแแ แ แแตแแแ แแแแต แแซแจแ แแแฝ แฅแแแฝ แ แแข
- แจแแฐแ แฅแซแต แซแแธแ แแแฆแฝ. แแ แจแตแ แจแแแ แ แ แแแญ แ แแซแจแฅ แ แฐแแแฐแ แจ PR แแฐแต แแตแฅ แญแแแฃแ แจแแฐแ แจแฅแซแต แฐแจแแแฝ แ แแแแญแ แแตแฅแข
- แ แฐแแณแณแญ แแ แแ แญ แแแฆแฝ. แ แแแแญ แแญ แแแแธแแ แแแฆแฝแ แตแแฐแญแ แ แแถแแฒแญ แแฐแแซแต แแแ แ แแแแฝ แฅแจแฐแแแ แแแแธแแ แซแจแแแฃแแข
- แจแแฐแแ แชแซ แแ แแ. แ แแแฌแฝแ แแ แญแ แแฐแแฐแ แฅแ แแจแแแฅ แฅแ แจแฐแณแณแฑ แจแแ แญ แฅแดแถแฝแ แแตแฐแแแต แ แซแตแแแแแแข แญแ แ แ แแแญ แ แแแฌแฝแแ แแแ แซแฐแญแแแแข (แ แแณแแต แแตแฅแตแฅแแต แแจแแญ แ แซแฑ แ แแแแฉ แแตแฅ แแแฃ แแแญ แแ แแฐแ แแแต แแ แถ แจแแฐแจแ แจแแแต แแแแฅ แแแข) แแฐ แฐแซ แแ แญ แแแแต แ แฃแ แแแ แแ - แจแแฐแแตแ แแญแฅแซแฎแฝ แญแจแแฉแข แ แฐแ แแแจ แแ แญ แแแแญ แฅแ แจแฐแจแแช แญแแแฝแ แแฐแแ แญ แแแ แแ แแตแฐแแแ แแแ แแแข
- แจแฐแปแปแ แแ แญแข แจแแ แจแต แแแฆแฝ แฐแแณแณแญ แจแแตแแต แแฐแต แตแแแจแฐแแฃ แ แแคแฑแ แแฉ แจแแ แฅแชแต แซแแ แ แญแต แฅแแแแแแข แ แตแแแ แจแแ แแ แจแตแ แแฐ แแ แแแแจแญ แซแตแฝแแแ. แจแ แแต แ แแต แ แแต แฅแ แ แแญ แจแแแแ แแ แจแต แฅแแณแ แแฐแแซแต แฅแแฝแแแ แฅแ แ แตแญแญแ แ แฐแแณแณแญ แแแแต แญแฐแซแแข แจแฐแจแแ แแ แญ แจแฐแจแแแแ แตแญแแต แตแแ แซ แฅแ แ แตแฐแแแแแต แซแปแฝแแแข แ แแแแฉ แ แฐแ แแแจแ แต แแ แฐแตแฐแซแญแแ แฅแ แ แแแ แ แแญแต แตแญแแต แแญ แแฃแต แ แญแฝแแ.
- แแฑแแชแฒ. แจแณแแฐแ แแแแ แแแ แแ แฅแ แแแแฝ แ แฐแแซแฉ แแแแถแฝ แแฃแแฉ แญแฝแแแข
แจแฐแแซแฉ แ แแแแฎแฝแ แญแฐแแ (แ แแแแฆแฝ / แ แแแแฆแฝ). แ แฐแแญแ แ แแตแฐแ แแ แ แซแแ แแ แ แจแแตแแแ แแแแต แ แแแแฅ แฅแ แตแแ แแ แ แซแแ แฃแแฅแ แแตแแแ แแแแต แ แแแแฅ แแแญ แญแฝแแแข แฅแ แจแแญแต แ แแแแฆแฝ แแแซแธแ แแญแแซแณแ แแ. - แ แแแจแญ แแญแข แแแจแซ แแแแแฝ แ แแต แฐแ แจแแตแแฐแ แ แแแแแตแ แแฐแแ แญ แฅแ แฐแ แแแฑ แ แฐแ แ แ แแแแต แฅแแฐ แฅแแ แแ แแแ แต แญแฝแแแข แจแฐแแซแฉ แญแแแฝ แซแแธแ แจแฐแแซแฉ แญแแแฝ แ แแ แจแฐแฐแฉ แฅแแต แจแฐแแซแฉ แจแแจแซ แ แแแแฆแฝ แ แ แแต แแ แแแฉ แญแฝแแแข
- แจแแ
แฐแต แแจแซ. แ แแณแแต แแ แ แฐแจแแแ แตแญแแถแฝ แแตแฅ แจแแ
แฐแต แแจแซแแฝแ แแแซแแต แ แตแธแแช แแแข แจแฐแแแแ แจแฐแจแแแแแ แตแญแแต แฐแ
แแแฑ แจแฐแ แ แ แแ
แจแต แแแฐแจแฅ แจแฐแแแแแ แ แแซแจแฅ แ แแ แแ แแแแ แจแฐแจแแแ แญแแแฝแ แ แ แแต แ แแแแญ แแญ แแแฃแ แญ แ แแปแ แแแแต แแแต แฅแแฝแแแแข แแแณแแ แแฎแจแ
แแแ แแแข
แจแ แแแแแถแน แ แแฑ แจแแญแแ แจแแแข
แฅแ แแ
แจแฐแ แแแจแ แจแแ แจแต แ แแซแจแฅ แจ"แแฐแ แ" แแ แญ แจแฐแแจ แแ แฅแ แแแแ แแแแถแฝ แแญแซแแ แญแฝแแแข แจแฐแแแ แจแ แแแ แญ แ แแณแแต แแณแถแฝ แฅแแแแแก
- แจแแญแแแณแแต แแ แญแข แแแแ แแฐแแ แชแซแแฝ แฐแตแแ แแญแแ แญแฝแแแข แ แ แแณแแต แแแณแแฝ แแแแ แจแฐแ แแแต แฅแญแแแแฝ แ แแแ แ แแญแต แแตแฅ แซแแแ แแ แจแต แ แแฅแแต แแตแฐแซแจแ แซแตแแแแแข แญแ แ แแซแจแฅ แจแ แแ แ แตแธแแช แซแฐแญแแแ. แ แแแแญ แแญ แแแแแแ แแแฅ แซแฐแจแ แ แแ แแ แแแญ แฅแ แฅแแฐแแ แแฐแแซแต แซแตแแแแแข แญแ แแแฑแ แฃแ แชแ แฅแ แธแญแ แแ.
- แจแแแแญ แตแแแต. แแ แจแต แ แ แแณแแต แ แแถแแฒแญ แแณแชแซแแฝ แฒแแ แญ แญแ แ แซแแต แฐแจแณแญ แแ แแแญแ แญแแแแ (แญแ แ แ แฐแซแ แแณแซ แญแฝแแ)แข แญแ แแ แฐแจแแช แฅแญแแ แ แแแฃแณ แตแญแแฑ แแตแฅ แแแแแต แฐแจแแช แฅแจแต แแ แญแ แญแฝแแแข
- แแณแชแซแแฝ. แแฌ แ แฝแแ แแญ แ แฐแแฐแจแฑ แ แแแแฎแฝ แแญ แจแแแฐแจแฑ แฅแ แแณแชแซแแฝ แฅแ
แ แแญ แญแแแแข แจแแฑ แฅแแถแน
แแ แจแต แฒแ แแแญ แฐแแฃแซแ แ แญแแแแข - แจแ แตแฐแณแฐแฅ แแแฅ แซแตแแแแแข แแแขแแฝ แฅแ DevOps แจแฝแแ แแ แญ แแญแแฝแ แซแแแแข แแ แจแตแ แจแแ แแแญ แแณแฅ แแฅแแฑ แฅแแแณ แแแตแ แญแฝแแแข
- แจแฐแ แแแจ แแ แจแตแ แจแแตแฐแแแ แ แ แแต แจแแฐแ แฅแซแต แซแแ แจแถแแตแแญ แแแต แแฐแต แซแตแแแแแข
แจแฐแฐแแ แจแ แแณแ แ แแณแแต แแฐแฆแฝ แ แแก-
- แ แแตแแแ แตแแ แซ แซแแฐแแแ แฐแจแแช แแ
แจแต แซแแจแฅแแฃ แ แแแฃแช แจแ แแแ แตแแ แซ แแแแ
แ แญแจแณแแแข แญแ
แแ แ แแ แแ แแแณ แญแฝแแ
HList
แแญแ ADTs (แจแแณแญ แญแแแฝ) แจแฃแ แชแซแต แฅแ แจแฌแญ แฅแแต แญแแ แจแแตแแแ แแแแต แแ แญแข - แ แแแแญ แแญแ แแตแฅ แ แแณแแต แฆแญแแญ แแ
แจแฅ แ แแฅแแก(
package
,import
,object
แแแแซแแฝ;
override def
แแฃแช แฅแดแถแฝ แแแธแ แแคแถแฝ)แข แญแ แ แจแแ DSL แ แแ แแ แแแณ แญแฝแแแข - แ แแ แแฅแ แแตแฅ แฐแแณแณแญ แจแ แแแแฝ แตแฅแตแฆแฝแ แฐแแแแญ แณแแ แแแแญแ แ แแธแแแแข
แแฐแแฐแแซ
แ แแ แแฅแ แแตแฅ แแ แจแตแ แ แแฅแณ แ แแแญ แฎแต แแตแฅ แ แ แตแฐแแแ แแแแต แจแแแจแ แแณแฅ แฐแแซแญแฐแแแข แ แแซแจแก แ แฅแ แ แแแฌแฝแแฝ แแตแฅ แ xml แฅแ แ แแแฝ แฝแแ แแญ แจแฐแแฐแจแฑ แแ แฎแฝแ แแแฐแซแต แฅแ แ แแญ แแแ แญแฝแแแข แแแ แฅแแณแ แจแฅแ แแณแ แ Scala แแตแฅ แขแฐแแ แญแ แแฐ แแแฝ แแแแ แจแแฝแ แแแแแฝ (แฅแแฐ แฎแตแแ แฃ แฒ # แฃ แตแแแต แฃ แแแฐ) แแฐแจแแ แญแฝแแแข แ แแต แฐแ แญแ แแ แ แซแแต แ แ แฒแต แแฎแแญแต แแแญแญ แญแฝแแ แฅแ แ แฅแฉ แแแณ แจแแญแตแแ แจแแ แแฐ แ แฎแแ แแฝแ แแแแต แญแแญแฉแข
แฅแญแแฅ แแ, แจแฐแ แแแจ แแ แญ แจแแฐแ แฅแซแต แซแแ แจแฅแตแแต แแฐแต แญแ แญแแ. แ แแแนแ แ แฐแแณแณแญ แจแแฐแ แฅแซแต แซแแ แ แแซแซ แแ แญ แแแ แจแฅ แแ แแฅแทแแข
แญแ แแด แ แฐแแซแฉ แแแแถแฝ แแซแแ แญแฝแแ-
- แจแแ แจแต แแจแแแซแ แแแซแแต แแญแฎแแฝแ แแ แแ แฅแ แ แแแแแ แจแแแต-แแแญ แแฐแฆแฝ แแตแแถแฝ แแ แ แแ แแแญ แแ แแณแซ แญแฝแแแข
- DSL แแ แญแ แ แแซ แแฐแ แแ แแน แ แแ แแแแต แแแแจแ แแฐแแ แญ แญแฝแแแข
- แฐแแแแญ แจแแฅแจแต แ แตแฐแณแฐแญ แจแซแต-แฐแญ แแ แญ แแตแฐแซแจแซแแฝ แแญแข แแแณแแฃ แจแญแแตแฐแญ แแถแฝแ แแฅแญ แตแแตแฐแซแญแ แแแแแแธแ แฅแแฝแแแ (1) แแถแน แ แตแแน แจแฐแปแปแ แแ แญ แแแแแตแค (2) แจแญแแตแฐแญ แ แตแฐแณแณแช แ แฒแต แจแ แแแแฝแ แแจแ แแแแ แแข
แ แแฐแแแแ
แ แแ แแกแญ แฝแแ แจแแ แแญ แ แแณแฝ แ แตแฐแซแจแต แตแแฐแกแ แ แแตแฌ แณแญแถแแญแฃ แแฌแ แแแญแฃ แ แแถแ แแแฌแญ แจแ แแ แแแ แฅแแณแฐแญแ แจแจแฑแแ แ แแฐแแแแ แแแต แฅแแแแแแข
แแแญ: hab.com