16.7. OptaWeb Vehicle Routing 开发指南


本节论述了如何在开发模式中配置和运行后端模块。

16.7.1. OptaWeb Vehicle Routing 项目结构

OptaWeb Vehicle Routing 项目是一个多模块 Maven 项目。

图 16.1. 模块依赖关系树图

后端和前端模块位于模块树的底部。这些模块包含应用源代码。

独立模块是组合后端和前端到单个可执行 JAR 文件的装配模块。

distribution 模块表示最终的 assembly 步骤。它使用独立应用程序和文档,并将它们打包成易于分发的存档中。

后端和前端是单独的项目,您可以单独构建和部署。实际上,它们使用完全不同的语言编写,并使用不同的工具进行构建。这两个项目都具有提供现代开发人员体验的工具,可在代码更改和正在运行的应用程序之间进行快速切换。

下面章节描述了如何在开发模式下运行后端和前端项目。

16.7.2. OptaWeb Vehicle Routing 后端模块

后端模块包含一个服务器端应用程序,它使用红帽构建的 OptaPlanner 优化载体路由。优化是一种 CPU 密集型计算,必须避免任何 I/O 操作才能将其完整性能。由于目标之一是尽量减少差差成本,因此 OptaWeb Vehicle Routing 在 RAM 内存中保留出差成本信息。在寻求时,OptaPlanner 需要了解用户输入的每个位置之间的差成本。此信息存储在名为 distance matrix 的结构中。

当您进入新位置时,OptaWeb Vehicle Routing 会计算新位置和所有其他位置之间的差额成本,并在距离列表中保存出差成本。travel 成本计算由 GraphHopper 路由引擎执行。

后端模块实现以下额外功能:

  • 持久性
  • 前端的 websocket 连接
  • 数据集加载、导出和导入

如需了解更多有关后端代码架构的信息,请参阅 第 16.8 节 “OptaWeb Vehicle 路由后端架构”

下面章节描述了如何在开发模式中配置和运行后端。

16.7.2.1. 运行 OptaWeb Vehicle Routing 后端模块

您可以在 Quarkus 开发模式下运行后端模块。

先决条件

流程

  1. 将目录改为 rhpam-7.13.2-kogito-and-optaplanner-quickstarts/optaweb-8.13.0.Final-redhat-00013/optaweb-vehicle-routing/optaweb-vehicle-routing-backend
  2. 要在 development 模式下运行后端,请输入以下命令:

    mvn compile quarkus:dev
    Copy to Clipboard Toggle word wrap

您可以使用 IntelliJ IDEA Ulitmate 运行 OptaWeb Vehicle 路由后端模块,以便更轻松地开发项目。Intellij IDEA Ultimate 包括 Quarkus 插件,它可自动为使用 Quarkus 框架的模块创建运行配置。

流程

使用 optaweb-vehicle-routing-backend 运行配置来运行后端。

其他资源

如需更多信息,请参阅 运行 Quarkus 应用程序

16.7.2.3. Quarkus 开发模式

在开发模式中,如果存在对后端源代码或配置的更改,并且刷新运行前端的浏览器选项卡,后端会自动重启。

了解有关 Quarkus 开发模式 的更多信息

您可以临时或永久覆盖 OptaWeb Vehicle Routing 后端模块的默认系统属性值。

OptaWeb Vehicle Routing 后端模块系统属性存储在 /src/main/resources/application.properties 文件中。此文件受版本控制。使用它来永久存储默认配置属性值并定义 Quarkus 配置集。

先决条件

流程

  • 要临时覆盖默认系统属性值,请在运行 mvnjava 命令时包括 -D<PROPERTY>=<VALUE & gt; 参数,其中 <PROPERTY > 是您要更改的属性值,而 < VALUE > 是您要暂时分配给该属性的值。以下示例演示了如何在使用 Maven 在 dev 模式中编译 Quarkus 项目时,将 quarkus.http.port 系统属性的值临时更改为 8181

    mvn compile quarkus:dev -Dquarkus.http.port=8181
    Copy to Clipboard Toggle word wrap

    这会临时更改 /src/main/resources/application.properties 文件中的属性值。

  • 要永久更改配置值,例如存储特定于您的开发环境的配置,请将 env-example 文件的内容复制到 optaweb-vehicle-routing-backend/.env 文件。

    此文件不包括在版本控制中,因此克隆存储库时不存在此文件。您可以在 .env 文件中进行更改,而不影响 Git 工作树。

其他资源

有关 OptaWeb Vehicle Routing 配置属性的完整列表,请参阅 第 16.9 节 “OptaWeb Vehicle 路由后端配置属性”

16.7.2.5. OptaWeb Vehicle Routing backend logging

OptaWeb Vehicle Routing 使用 SLF4J API 和 Logback 作为日志框架。如需更多信息,请参阅 Quarkus - 配置日志

16.7.3. 使用 OptaWeb Vehicle Routing 前端模块

前端项目通过 Create React App 启动。创建 React App 提供了多个脚本和依赖项,可帮助开发并构建用于生产环境的应用程序。

先决条件

流程

  1. 在 Fedora 中,输入以下命令来设置开发环境:

    sudo dnf install npm
    Copy to Clipboard Toggle word wrap

    有关安装 npm 的更多信息,请参阅下载并安装 Node.js 和 npm

  2. 将目录更改为 rhpam-7.13.2-kogito-and-optaplanner-quickstarts/optaweb-8.13.0.Final-redhat-00013/optaweb-vehicle-routing/optaweb-vehicle-routing-frontend
  3. 安装 npm 依赖项:

    npm install
    Copy to Clipboard Toggle word wrap

    与 Maven 不同,npm 软件包管理器在项目目录下将依赖项安装到 node_modules 中,并且仅在您执行 npm install 时执行此操作。每当 package.json 更改后列出的依赖项时,例如,当您将更改拉取到 master 分支时,都必须在运行开发服务器前执行 npm install

  4. 输入以下命令来运行开发服务器:

    npm start
    Copy to Clipboard Toggle word wrap
  5. 如果没有自动打开,在网页浏览器中打开 http://localhost:3000/

    默认情况下,npm start 命令会尝试在您的默认浏览器中打开这个 URL。

    注意

    如果您不希望 npm start 命令在每次运行时都打开一个新浏览器标签页,请导出 BROWSER=none 环境变量。您可以使用 .env.local 文件使这个首选项持久。要做到这一点,请输入以下命令:

    echo BROWSER=none >> .env.local
    Copy to Clipboard Toggle word wrap

    每当您在前端源代码中进行更改时,浏览器都会刷新该页面。在终端中运行的开发服务器进程会提取更改,并将编译和 lint 错误输出到控制台。

  6. 输入以下命令来运行测试:

    npm test
    Copy to Clipboard Toggle word wrap
  7. 在执行 npm startnpm run build 时,更改 REACT_APP_BACKEND_URL 环境变量的值,以指定 npm 要使用的后端项目的位置,例如:

    REACT_APP_BACKEND_URL=http://10.0.0.123:8081
    Copy to Clipboard Toggle word wrap
    注意

    npm 构建过程中,环境变量在 JavaScript 捆绑包内被硬编码,因此您必须在构建和部署前端前指定后端位置。

    如需了解更多有关 React 环境变量的信息,请参阅添加 自定义环境变量

  8. 要构建前端,请输入以下命令之一:

    ./mvnw install
    Copy to Clipboard Toggle word wrap
    mvn install
    Copy to Clipboard Toggle word wrap
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2026 Red Hat