# anvil3 **Repository Path**: passerby_ugly/anvil3 ## Basic Information - **Project Name**: anvil3 - **Description**: 基于scala和akka http封装的微服务框架 - **Primary Language**: Scala - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2024-08-13 - **Last Updated**: 2024-08-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # anvil3 #### 介绍 基于scala和akka http封装的微服务框架 #### 软件架构 Scala、Akka Http #### 安装教程 1. 在maven或gradle里引入: implementation("com.anvil:anvil-akka:3.0.0") #### 使用说明 1. 引入基础类: import com.anvil.akka.http.api.{ApiHelper, ApiRoute} import com.anvil.akka.http.server.HttpServerBase import com.anvil.common.application.{ApplicationHelper, BasicApplication} import com.anvil.common.config.ConfigurationSupport import com.anvil.common.registry.RegistryHelper import com.anvil.common.utils.NetHelper import com.anvil.data.DatabaseInitializer import org.slf4j.LoggerFactory import scala.util.{Failure, Success, Try} 2. 创建应用入口 object MyServerApplication extends BasicApplication { override val applicationName: String = ApplicationHelper.decideApplicationName("my-server") private val defaultPort = 8020 private lazy val log = LoggerFactory.getLogger(getClass) private def startService(ip: String, port: Int): Unit = { //构建服务路由, 将在com.anvil.server.api下扫描controller val serviceApiRoute = ApiRoute.service("/", ApiHelper.createInvokerFactory(getClass.getClassLoader,"com.anvil.akka.http.server.health", "com.anvil.server.api")) def onServerStart(): Unit = { log.info(s"服务在端口[$port]已经处于可用状态...") val hostAddress = NetHelper.getHostAddress("docker-server") match { case None => //非docker ip case Some(a) => a } //注册到配置中心 val serviceId = s"$applicationName@$hostAddress" RegistryHelper.getDefaultRegistryServer.registryService( serviceId = serviceId, serviceName = applicationName, serviceAddress = hostAddress, servicePort = port, checkUrl = s"http://$hostAddress:$port/actuator/health", checkInterval = "10s", tags = "file-center" ) log.debug(s"已经向注册中心注册了服务 - [$serviceId] - [$applicationName]") } def onFailure(cause: Throwable): Unit = { log.error("服务绑定失败!", cause) } val server = new HttpServerBase(port) server.start( route = _ => serviceApiRoute, onStarted = onServerStart(), onFailed = onFailure ) } override def process(): Unit = { ConfigurationSupport.setProperty(ApplicationHelper.REGISTRY_CENTER_TYPE_KEY, "none") //不要注册中心 //连接数据库 //DatabaseInitializer.initDatabaseFromConfigCenter() log.info("启动应用中心...") getLocalAddress match { case None => log.error("无法确定主机IP地址!") System.exit(59) case Some(ipAddress) => val servicePort = ConfigurationSupport.getProperty("server.port", defaultPort.toString).toInt startService(ipAddress, servicePort) } } } 3. 在com.anvil.server.api(或者你自己定义的包)下定义controller @ApiRealization class MyController { @Expose("/doSomeThing") def doSomeThing(arg: String): String = { return s"Hello, $arg!" } }