Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
@Component
class ThriftAdsServer @Autowired constructor(
@Value("\${thrift.server.port}")
private val serverPort: Int,
handler: AdsService.Iface) {
companion object {
private val logger = LoggerFactory.getLogger("THRIFT-SERVER")
}
private val server: TServer
@PostConstruct
fun startServer() {
logger.info("Thrift server starting at port $serverPort")
thread(start = true) {
try {
val serverTransport = TNonblockingServerSocket(serverPort)
server = THsHaServer(THsHaServer.Args(serverTransport).processor(AdsService.Processor(handler)))
server.serve()
} catch (e: Throwable) {
logger.error("Server was crashed.", e)
}
}
}
@PreDestroy
fun stopServer() {
logger.info("Try to stop thrift server serving at port $serverPort")
if (server.isServing) {
server.stop()
logger.info("thrift server was stopped")
} else {
logger.info("Server wasn't started")
}
}
}Дело в том, что при таком подходе для изменения API ты должен вносить не связанные изменения и на стороне клиента и на стороне сервера.
Плюс, как я писал некоторые разработчики меняя модель данных на сервере не всегда меняли модель данных на мираже.
Thrift в качестве REST API