飞码网-免费源码博客分享网站

点击这里给我发消息

用Appsody Quarkus实验集组成微服务|-Java教程

飞码网-免费源码博客分享网站 爱上飞码网—https://www.codefrees.com— 飞码网-matlab-python-C++ 爱上飞码网—https://www.codefrees.com— 飞码网-免费源码博客分享网站

具有原子速度且没有YAML文件的Java微服务构成了一个成功的组合。将Quarkus与新的开源项目Appsody一起使用,使您可以从Java微服务的速度中受益,而无需担心YAML文件的麻烦。

本教程假定您对项目Appsody有基本的了解。Project Appsody使开发适用于云的应用程序变得自然,从而消除了与Docker构建和Kubernetes部署文件的烦人的交互。即使项目Appsody从一开始就支持Java语言,也没有掩盖云世界中Java应用程序固有的庞大功能。到目前为止。

进入Quarkus,这是Java平台的一个里程碑式发展,它是为云设计的,具有几乎即时的引导时间,并显着减少了磁盘和内存的占用空间。

在本教程中,我将介绍最近发布的Quarkus的Appsody实验性集合,并向您展示如何快速开发可与真实数据库进行交互的基于Quarkus的应用程序。

先决条件

完成以下步骤,以在本地工作站上构建和测试应用程序:

  • 安装Appsody CLI
  • 安装Docker
  • 安装JDK 8或11+,并适当配置JAVA_HOME。

预计的时间

具备先决条件后,您应该能够在30分钟内完成本教程。

脚步

遵循本教程,您将执行以下步骤:

  1. 创建应用程序
  2. 运行应用程序
  3. 在测试模式下运行应用程序
  4. 添加一个Quarkus扩展
  5. 将应用程序连接到远程服务

在教程结束时,您应该在计算机上运行以下系统:

应用架构

1.创建应用程序

首先使用Appsody命令行界面(CLI)创建应用程序。

打开一个终端窗口并运行以下命令来创建应用程序目录,并使用Quarkus应用程序的模板对其进行初始化:

mkdir quarkus-microservice
cd quarkus-microservice
appsody init experimental/quarkus

此步骤将pom.xml在目录内创建所有源文件和一个构建文件。

所有项目都是使用相同的Maven组和工件标识符创建的,这可能会导致Maven存储库中发生冲突。为避免这些潜在的冲突,必须<artifactId>getting-started</artifactId>pom.xml文件中修改为:

<artifactId>quarkus-microservice</artifactId>

请注意,该pom.xml文件引用了您不可见的父项目:

  <parent>
    <groupId>dev.appsody</groupId>
    <artifactId>quarkus</artifactId>
    <version>...</version>
  </parent>

但是,您将使用适合您平台的命令,在工作站的默认Maven存储库中找到该依赖关系,如下所示。

  • 在macOS或Linux上,输入以下命令:
find ~/.m2/repository/dev/appsody/quarkus
  • 在Windows上,输入以下命令:
dir /s /b /og %USERPROFILE%\.m2\repository\dev\appsody\quarkus

您应该看到与以下输出类似的输出,由于新版本的Appsody堆栈,Quarkus的版本可能有所不同:

.../repository/dev/appsody/quarkus/<version>/quarkus-<version>.pom
.../repository/dev/appsody/quarkus/<version>/_remote.repositories
.../repository/dev/appsody/quarkus/maven-metadata-local.xml

2.运行应用程序

创建了应用程序之后,该是第一次运行它了。请注意,Quarkus集合基于Maven构建,因此第一次运行可能会触发大量Maven依赖项下载。

仍在创建应用程序的终端和目录中,执行以下命令:appsody run

Appsody完成下载应用程序依赖项之后,它将立即启动应用程序并指示它正在侦听端口8080:

[Container] Listening for transport dt_socket at address: 5005
[Container] 2019-10-31 20:43:44,780 INFO  [io.qua.dep.QuarkusAugmentor] (main) Beginning quarkus augmentation
[Container] 2019-10-31 20:43:47,119 INFO  [io.qua.dep.QuarkusAugmentor] (main) Quarkus augmentation completed in 2339ms
[Container] 2019-10-31 20:43:48,530 INFO  [io.quarkus] (main) Quarkus 0.18.0 started in 4.694s. Listening on: http://0.0.0.0:8080
[Container] 2019-10-31 20:43:48,536 INFO  [io.quarkus] (main) Installed features: [cdi, resteasy]

您可以从Web浏览器中打开应用程序URL,该Web浏览器包含一个问候语网页,指示您的应用程序正在正确运行。

您还将注意到模板应用程序与Quarkus“入门”指南中的示例应用程序基本相同。

您也可以为http:// localhost:8080 / hello端点上的基本“ hello服务”和http:// localhost:8080 / hello / greeting / some-text处的基本“ hello服务”启动RESTful URL示例。 -参数。

在检查完各个端点的响应之后,让我们对源代码中的响应消息进行修改,然后再次测试端点结果。

请注意,代码更改几乎是如何立即反映在应用程序输出中的。

首先,更换线路return "hello";src/main/java/org/acme/quickstart/GreetingResource.java有:

return "modified hello";

现在,在http:// localhost:8080 / hello端点上检查修改后的响应。

3.在测试模式下运行该应用程序

Appsody可以在测试模式下运行应用程序,在该模式下,它还运行与该应用程序捆绑在一起的所有测试用例。

对于Quarkus堆栈,这些测试是使用JUnit 5框架编写的,位于以下位置./src/test/java

./src/test/java/org/acme/quickstart/NativeGreetingResourceIT.java
./src/test/java/org/acme/quickstart/GreetingResourceTest.java

现在,使用组合"Ctrl+C"停止应用程序,然后运行:appsody stop

使用以下命令在测试模式下重新启动应用程序appsody test

请注意,Appsody完成了在测试模式下运行的依赖项的下载后,由于先前步骤中的代码更改,输出显示测试用例失败:

[Container] [ERROR]   GreetingResourceTest.testHelloEndpoint:20 1 expectation failed.
[Container] Response body doesn't match expectation.
[Container] Expected: is "hello"
[Container]   Actual: modified hello
[Container]
[Container] [INFO]
[Container] [ERROR] Tests run: 2, Failures: 1, Errors: 0, Skipped: 0
[Container] [INFO]
[Container] [INFO] ------------------------------------------------------------------------
[Container] [INFO] BUILD FAILURE
[Container] [INFO] ------------------------------------------------------------------------

要修复测试用例,请将行:.body(is("hello"));in替换为./src/test/java/org/acme/quickstart/GreetingResourceTest.java

.body(is("modified hello"));

在几秒钟内,您应该看到Appsody检测到更改并再次运行测试用例,这一次显示了成功的结果:

[Container] [INFO] Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 9.094 s - in org.acme.quickstart.GreetingResourceTest
[Container] 2019-11-01 00:52:53,692 INFO  [io.quarkus] (main) Quarkus stopped in 0.015s
[Container] [INFO]
[Container] [INFO] Results:
[Container] [INFO]
[Container] [INFO] Tests run: 2, Failures: 0, Errors: 0, Skipped: 0
[Container] [INFO]
[Container] [INFO] ------------------------------------------------------------------------
[Container] [INFO] BUILD SUCCESS
[Container] [INFO] ------------------------------------------------------------------------

4.向应用程序添加一个Quarkus扩展

Quarkus使用Quarkus Extensions使开发人员更容易将新功能包括到应用程序中。

使用扩展机制可以对pom.xml文件进行必要的修改,而不是强迫开发人员从Maven存储库中挖掘正确的依赖项。

在本教程的这一部分中,我将向您展示如何添加PostgreSQL扩展,作为如何扩展由Appsody创建的Quarkus项目,然后对应用程序进行修改以连接到正在运行的PostgreSQL实例的示例。

Quarkus扩展与Appsody几乎相同,但是有一个主要区别:您必须mvnw在应用程序目录中使用由Appsody创建Maven包装器,而不是mvn直接使用Maven命令行实用程序。需要从运行Appsody的Docker容器内部调用该包装,直到在Quarkus堆栈中解决[此问题](https://github.com/appsody/stacks/issues/671)为止。

输入以下命令以查看所有可用的扩展:

docker exec quarkus-microservice-dev /project/user-app/mvnw quarkus:list-extensions

扩展列表应包含一行带有PostgreSQL扩展标识符的行:

JDBC Driver - PostgreSQL                           quarkus-jdbc-postgresql

有了扩展名之后,您现在可以使用以下命令将扩展名添加到应用程序中:

docker exec quarkus-microservice-dev /project/user-app/mvnw quarkus:add-extension -Dextensions="quarkus-jdbc-postgresql"

此时,您应该能够看到对该pom.xml文件所做的相应修改

    <dependency>
      <groupId>io.quarkus</groupId>
      <artifactId>quarkus-jdbc-postgresql</artifactId>
      <version>...</version>
    </dependency>

通过pom.xml增加应用程序文件的PostgreSQL连接依赖性,我们可以创建连接到数据库的REST端点。

将本教程资源中的DatabaseResource.java文件复制到src/main/java/org/acme/quickstart应用程序目录中。

检查新文件的内容,注意它引入了一个'/ database'端点,该端点建立到PostgreSQL数据库的简单连接并返回连接元数据:

@Path("/database")
public class DatabaseResource {

    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String databaseMetadata() {

经过进一步检查,您将看到新端点可以从环境变量读取连接参数:

        String databaseHostname = getEnv("WKS_PSQL_HOST", "workshop-postgres");
        String databasePort = getEnv("WKS_PSQL_PORT", "5432");
        String jdbcUrl = "jdbc:postgresql://" + databaseHostname + ":" + databasePort + "/";
        ...
        String databaseUser = getEnv("WKS_PSQL_USER", "postgres");
        String databasePass = getEnv("WKS_PSQL_PWD", "mysecretpassword");

为简单起见,代码使用与本教程中的示例匹配的默认值,但是您可以通过创建具有这些属性的文件,然后将其appsody run--docker-options="--env-file=postgresql.properties"选项一起传递给应用程序,从而为应用程序提供环境变量

本教程的资源中提供了此文件的示例:postgres.properties

在Kubernetes集群中,可以从Kubernetes ConfigMap对象映射环境变量,也可以使用Secrets作为环境变量,因此本教程中的相同源代码可以在集群内运行而无需修改。

5.将应用程序连接到远程服务

作为运行该应用程序的最后一步,让我们实例化一个本地PostgreSQL数据库。为此,您对PostgreSQL数据库容器和应用程序容器都使用了自定义的Docker网络,这使得应用程序可以通过容器名称而不是IP地址来定位数据库。

docker network create workshop_nw

现在,您可以启动连接到该网络的PostgreSQL数据库。将该容器命名为workshop-postgres

docker run --rm -it --name workshop-postgres --hostname psqldb --network workshop_nw -e POSTGRES_PASSWORD=mysecretpassword -d postgres

通过运行以下命令,确保数据库容器正在运行:

docker ps

b66c53a3be0f        postgres                                                  "docker-entrypoint.s…"   22 seconds ago      Up 21 seconds       5432/tcp                    workshop-postgres

使用组合"Ctrl+C"终止正在运行的应用程序,然后运行:appsody stop,以便可以使用新创建的网络重新启动它。输入以下命令以在新网络中启动应用程序:

appsody run --network workshop_nw

访问位于http:// localhost:8080 / database的端点应返回类似于以下内容的结果:

client.info.ApplicationName=PostgreSQL JDBC Driver;
db.product.name=PostgreSQL;
db.product.version=...;
db.major.version=...;
db.minor.version=...;
db.driver.version=...;
db.jdbc.major.version=...;
db.jdbc.minor.version=...

放松开发环境

完成所有测试后,停止在本教程中创建的容器并处理自定义网络。

使用Ctrl+C组合键结束应用程序,然后输入以下命令:

appsody stop
docker stop workshop-postgres
docker network rm workshop_nw

下一步

完成本教程后,您应该可以使用Appsody来开发新的应用程序,并开始使用Quarkus框架创建真正的Java应用程序的第一步。您可以利用新知识执行以下几个步骤:

  • 使用Codewind扩展您的应用程序:要了解Appsody的更丰富的开发经验,请阅读本教程,其中涵盖了流行的IDE的Codewind扩展。您可以使用Codewind将在本教程中创建的应用程序导入到IDE中,并通过代码更改更流畅地进行迭代。
  • 将您的应用程序部署到Kubernetes:要了解Appsody如何处理Kubernetes部署,请查看本教程并直接跳转到appsody deploy参考资料,从那里您可以快速调整说明以将此处的Quarkus示例部署到Kubernetes集群中。
  • 创建新的Appsody堆栈或模板:如果您准备创建自己的堆栈,或者可能要向Appsody的Quarkus集合中添加新的应用程序模板,请阅读有关自定义Appsody的文章,其中介绍了Appsody集合的概念,然后深入了解此。本教程向您展示如何创建自己的Appsody堆栈。

作为最后的建议,请查看Kabanero项目,该项目将Appsody,Codewind和其他开源项目结合在一起,以提供从应用程序开发人员到应用程序部署和操作的集成DevOps体验。

飞码网-免费源码博客分享网站 爱上飞码网—https://www.codefrees.com— 飞码网-matlab-python-C++ 爱上飞码网—https://www.codefrees.com— 飞码网-免费源码博客分享网站
赞 ()
内容页底部广告位3
留言与评论(共有 0 条评论)
   
验证码: