基于 Micronaut 的应用程序的某些组件与它们在 Spring Boot 应用程序中的对应组件类似,例如,以下是控制器代码:
@Controller(value = https://www.isolves.com/it/cxkf/kj/2021-08-06/"/application-info",consumes = [MediaType.APPLICATION_JSON],produces = [MediaType.APPLICATION_JSON])class ApplicationInfoController(private val applicationInfoService: ApplicationInfoService) {@Getfun get(requestTo: String?): ApplicationInfo = applicationInfoService.get(requestTo)@Get("/logo", produces = [MediaType.IMAGE_PNG])fun getLogo(): ByteArray = applicationInfoService.getLogo()}Micronaut 中对 Kotlin 的支持建立在kapt编译器插件的基础上(参考Micronaut Kotlin 指南了解更多详细信息) 。
构建脚本配置如下:
plugins {...kotlin("kapt")...}dependencies {kapt("io.micronaut:micronaut-inject-java:$micronautVersion")...kaptTest("io.micronaut:micronaut-inject-java:$micronautVersion")...}以下是配置文件的内容:
micronaut:application:name: micronaut-serviceserver:port: 8083consul:client:registration:enabled: trueapplication-info:name: ${micronaut.application.name}framework:name: Micronautrelease-year: 2018JSON、properties和 Groovy 文件格式也可用于配置(参考Micronaut 配置指南查看更多详细信息) 。
Quarkus服务Quarkus是作为一种应对新部署环境和应用程序架构等挑战的工具而引入的,在框架上编写的应用程序将具有低内存消耗和更快的启动时间 。此外,对开发人员也很友好,例如,开箱即用的实时重新加载 。
Quarkus 应用程序目前没有 main 方法,但也许未来会出现(GitHub 上的问题) 。
对于熟悉 Spring 或 Java EE 的人来说,Controller 看起来非常熟悉:
@Path("/application-info")@Produces(MediaType.APPLICATION_JSON)@Consumes(MediaType.APPLICATION_JSON)class ApplicationInfoResource(@Inject private val applicationInfoService: ApplicationInfoService) {@GETfun get(@QueryParam("request-to") requestTo: String?): Response =Response.ok(applicationInfoService.get(requestTo)).build()@GET@Path("/logo")@Produces("image/png")fun logo(): Response = Response.ok(applicationInfoService.getLogo()).build()}如你所见,bean 是通过@Inject注解注入的,对于注入的 bean,你可以指定一个范围,例如:
@ApplicationScopedclass ApplicationInfoService(...) {...}为其他服务创建 REST 接口,就像使用 JAX-RS 和 MicroProfile 创建接口一样简单:
@ApplicationScoped@Path("/")interface ExternalServiceClient {@GET@Path("/application-info")@Produces("application/json")fun getApplicationInfo(): ApplicationInfo}@RegisterRestClient(baseUri = "http://helidon-service")interface HelidonServiceClient : ExternalServiceClient@RegisterRestClient(baseUri = "http://ktor-service")interface KtorServiceClient : ExternalServiceClient@RegisterRestClient(baseUri = "http://micronaut-service")interface MicronautServiceClient : ExternalServiceClient@RegisterRestClient(baseUri = "http://quarkus-service")interface QuarkusServiceClient : ExternalServiceClient@RegisterRestClient(baseUri = "http://spring-boot-service")interface SpringBootServiceClient : ExternalServiceClient但是它现在缺乏对服务发现 ( Eureka和Consul ) 的内置支持,因为该框架主要针对云环境 。因此,在 Helidon 和 Ktor 服务中,我使用了Java类库方式的Consul 客户端 。
首先,需要注册应用程序:
@ApplicationScopedclass ConsulRegistrationBean(@Inject private val consulClient: ConsulClient) {fun onStart(@Observes event: StartupEvent) {consulClient.register()}}然后需要将服务的名称解析到其特定位置;
解析是通过从 Consul 客户端获得的服务的位置替换 requestContext的URI 来实现的:
@Provider@ApplicationScopedclass ConsulFilter(@Inject private val consulClient: ConsulClient) : ClientRequestFilter {override fun filter(requestContext: ClientRequestContext) {val serviceName = requestContext.uri.hostval serviceInstance = consulClient.getServiceInstance(serviceName)val newUri: URI = URIBuilder(URI.create(requestContext.uri.toString())).setHost(serviceInstance.address).setPort(serviceInstance.port).build()requestContext.uri = newUri}}Quarkus也支持通过properties 或 YAML 文件进行配置(参考Quarkus 配置指南了解更多详细信息) 。
Spring Boot服务创建该框架是为了使用 Spring Framework 生态系统,同时有利于简化应用程序的开发 。这是通过auto-configuration实现的 。
以下是控制器代码:
@RestController@RequestMapping(path = ["application-info"], produces = [MediaType.APPLICATION_JSON_VALUE])class ApplicationInfoController(private val applicationInfoService: ApplicationInfoService) {@GetMappingfun get(@RequestParam("request-to") requestTo: String?): ApplicationInfo = applicationInfoService.get(requestTo)@GetMapping(path = ["/logo"], produces = [MediaType.IMAGE_PNG_VALUE])fun getLogo(): ByteArray = applicationInfoService.getLogo()}
推荐阅读
- 宫廷普洱茶特点,宫廷普洱茶功效与作用都有什么
- 随身wifi和移动wifi有什么区别?
- win10彻底永久关闭自动更新的方法
- 2018年牛股排行榜 2017年牛股排行榜
- 桑葚泡酒有什么功效与作用,杜仲泡酒有什么功效与作用
- 自助收银机的功能有哪些
- 菊花相克食物,所谓食物的相克有以下几种情况
- 生蚝生吃有寄生虫吗 生吃生蚝的危害
- 哪种红枫最好看,红枫都有哪些品种
- 仿瓷涂料有哪些施工工艺
