Quarkus - 按需启动 Web 服务器

发布于 2025-01-10 22:52:13 字数 1069 浏览 0 评论 0原文

有一个用 Quarkus 编写的 CLI 应用程序,其工作原理如下:

$ quarkus-app --input Hello
Output: olleH

现在还应该可以通过 REST 调用它。但是,只有在传递了参数“--server”时,才应启动此服务器:

$ quarkus-app --server &
Listening on '127.0.0.1:7070'
$ curl http://127.0.0.1:7070/api/reverse?input=Hello
Output: olleH

现在如何让 WebServer 仅在“--server”上启动?

我的代码目前如下所示:

@QuarkusMain
class CommandLine : QuarkusApplication {

    override fun run(vararg args: String?): Int {
        val options: Options = Options()
        options.addOption("i", "input", false, "Input to reverse")
        options.addOption("s", "server", false, "Start server")

        val parser: CommandLineParser = DefaultParser()
        val cmd: CommandLine = parser.parse(options, args)
        if (cmd.hasOption("server")) {
          // TODO: Start server
        } else if (cmd.hasOption("input")) {
          println("Output: ${cmd.getOptionValue("input").toString().reversed()}")
        }
        return 0
    }
}

There is a CLI application written in Quarkus, it works as follows:

$ quarkus-app --input Hello
Output: olleH

Now there should also be the possibility to call this via a REST. However, this server should only be stared if the argument "--server" is passed:

$ quarkus-app --server &
Listening on '127.0.0.1:7070'
$ curl http://127.0.0.1:7070/api/reverse?input=Hello
Output: olleH

Now how do I get the WebServer to start only on "--server"?

My code currently looks like this:

@QuarkusMain
class CommandLine : QuarkusApplication {

    override fun run(vararg args: String?): Int {
        val options: Options = Options()
        options.addOption("i", "input", false, "Input to reverse")
        options.addOption("s", "server", false, "Start server")

        val parser: CommandLineParser = DefaultParser()
        val cmd: CommandLine = parser.parse(options, args)
        if (cmd.hasOption("server")) {
          // TODO: Start server
        } else if (cmd.hasOption("input")) {
          println("Output: ${cmd.getOptionValue("input").toString().reversed()}")
        }
        return 0
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

那些过往 2025-01-17 22:52:14

这可以通过定义 QuarkusMain 并稍后调用 Quarkus.run() 来实现。

import io.quarkus.runtime.Quarkus
import io.quarkus.runtime.annotations.QuarkusMain

@QuarkusMain
object Main {

    @JvmStatic
    fun main(args: Array<String>) {
        if (args.isNotEmpty() && args[0] == "--serve") {
            // Start HTTP server
            Quarkus.run(*args)
        } else if (args.size >= 2 && args[0] == "--input") {
            // Run CLI logic without starting HTTP server
            runCliLogic(args[1])
        } else {
            println("Usage: application [--serve | --input]")
        }
    }

    private fun runCliLogic(content: String) {
        // Implement your CLI logic here
        println(content.reversed())
    }
}

此外,当然必须安装 io.quarkus:quarkus-resteasy 并定义资源:

import javax.ws.rs.GET
import javax.ws.rs.Path
import javax.ws.rs.QueryParam
import javax.ws.rs.core.MediaType
import javax.ws.rs.core.Response

@Path("api/reverse")
class ReverseResource {

    @GET
    fun reverseInput(@QueryParam("input") input: String?): Response {
        if (input.isNullOrEmpty()) {
            return Response.status(Response.Status.BAD_REQUEST)
                .entity("Input parameter is required")
                .type(MediaType.TEXT_PLAIN_TYPE)
                .build()
        }

        val reversedInput = input.reversed()
        return Response.ok(reversedInput).build()
    }
}

This is possible by defining a QuarkusMain and later calling Quarkus.run().

import io.quarkus.runtime.Quarkus
import io.quarkus.runtime.annotations.QuarkusMain

@QuarkusMain
object Main {

    @JvmStatic
    fun main(args: Array<String>) {
        if (args.isNotEmpty() && args[0] == "--serve") {
            // Start HTTP server
            Quarkus.run(*args)
        } else if (args.size >= 2 && args[0] == "--input") {
            // Run CLI logic without starting HTTP server
            runCliLogic(args[1])
        } else {
            println("Usage: application [--serve | --input]")
        }
    }

    private fun runCliLogic(content: String) {
        // Implement your CLI logic here
        println(content.reversed())
    }
}

In addition, io.quarkus:quarkus-resteasy must of course be installed and a resource must be defined:

import javax.ws.rs.GET
import javax.ws.rs.Path
import javax.ws.rs.QueryParam
import javax.ws.rs.core.MediaType
import javax.ws.rs.core.Response

@Path("api/reverse")
class ReverseResource {

    @GET
    fun reverseInput(@QueryParam("input") input: String?): Response {
        if (input.isNullOrEmpty()) {
            return Response.status(Response.Status.BAD_REQUEST)
                .entity("Input parameter is required")
                .type(MediaType.TEXT_PLAIN_TYPE)
                .build()
        }

        val reversedInput = input.reversed()
        return Response.ok(reversedInput).build()
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文