16.7. OptaWeb Vehicle Routing 开发指南
这部分论述了如何在开发模式中配置和运行后端模块和前端模块。
16.7.1. OptaWeb Vehicle Routing 项目结构 复制链接链接已复制到粘贴板!
OptaWeb Vehicle Routing 项目是一个多模块 Maven 项目。
图 16.1. 模块依赖项树图
后端和前端模块位于模块树的底部。这些模块包含应用源代码。
standalone 模块是一个装配模块,它将后端和前端合并到单个可执行 JAR 文件中。
distribution 模块代表最终的装配步骤。它采用独立应用和文档,并将它们打包在易于分发的存档中。
后端和前端是您可以单独构建和部署的独立项目。实际上,它们使用完全不同的语言编写,并使用不同工具构建。两个项目都有工具,为现代开发人员体验提供代码更改和正在运行的应用程序之间的快速转变。
下一部分描述了如何在开发模式下运行后端和前端项目。
16.7.2. OptaWeb Vehicle Routing 后端模块 复制链接链接已复制到粘贴板!
后端模块包含一个服务器端应用程序,它使用红帽构建的 OptaPlanner 来优化 vehicle 路由。优化是一种 CPU 密集型计算,必须避免任何 I/O 操作才能完全执行。因为其中一个首席目标是最大程度降低差旅成本,可以是时间或距离,OptaWeb Vehicle Routing 能够在 RAM 内存中保持旅行成本信息。在解决时,OptaPlanner 需要知道用户输入的每对位置之间的差成本。此信息存储在称为 距离矩阵 的结构中。
当您输入新位置时,OptaWeb Vehicle Routing 计算新位置和目前输入的每个其他位置之间的旅行成本,并在距离距离列表中存储差成本。差旅成本计算由 GraphHopper 路由引擎执行。
后端模块实现以下额外功能:
- 持久性
- 前端的 websocket 连接
- 数据集加载、导出和导入
要了解更多有关后端代码架构的信息,请参阅 第 16.8 节 “OptaWeb Vehicle Routing 后端架构”。
下一部分描述了如何在开发模式中配置和运行后端。
16.7.2.1. 运行 OptaWeb Vehicle Routing 后端模块 复制链接链接已复制到粘贴板!
您可以在 Quarkus 开发模式下运行后端模块。
先决条件
- OptaWeb Vehicle Routing 已配置,如 第 16.4 节 “手动配置并运行 OptaWeb Vehicle Routing” 所述。
流程
-
将目录改为
rhdm-7.12.0-kogito-and-optaplanner-quickstarts/optaweb-8.11.1.Final-redhat-00006/optaweb-vehicle-routing/optaweb-vehicle-routing-backend。 要在开发模式下运行后端,请输入以下命令:
mvn compile quarkus:dev
mvn compile quarkus:devCopy to Clipboard Copied! Toggle word wrap Toggle overflow
您可以使用 IntelliJ IDEA Ulitmate 运行 OptaWeb Vehicle Routing 后端模块,以便更轻松地开发项目。IntelliJ IDEA Ultimate 包含 Quarkus 插件,它自动为使用 Quarkus 框架的模块创建运行配置。
流程
使用 optaweb-vehicle-routing-backend 运行配置来运行后端。
其他资源
如需更多信息,请参阅 运行 Quarkus 应用程序。
16.7.2.3. Quarkus 开发模式 复制链接链接已复制到粘贴板!
在开发模式中,如果存在对后端源代码或配置的更改,并且您刷新了前端运行的浏览器标签页,则后端会自动重启。
了解有关 Quarkus 开发模式 的更多信息。
16.7.2.4. 更改 OptaWeb Vehicle Routing 后端模块系统属性值 复制链接链接已复制到粘贴板!
您可以临时或永久覆盖 OptaWeb Vehicle Routing 后端模块的默认系统属性值。
OptaWeb Vehicle Routing 后端模块系统属性存储在 /src/main/resources/application.properties 文件中。此文件受版本控制。使用它永久存储默认配置属性值并定义 Quarkus 配置集。
先决条件
- OptaWeb Vehicle Routing starter 应用程序已下载并提取。如需更多信息,请参阅 第 16.2 节 “下载并构建 OptaWeb Vehicle Routing 部署文件”。
流程
要临时覆盖默认系统属性值,请在运行
mvn或java命令时包含-D<PROPERTY>=<VALUE> 参数,其中 <PROPERTY> 是您要更改的属性的名称,<VALUE> 是您要临时分配给该属性的值。以下示例演示了如何在使用 Maven 在dev模式中编译 Quarkus 项目时,将quarkus.http.port系统属性的值临时改为8181:mvn compile quarkus:dev -Dquarkus.http.port=8181
mvn compile quarkus:dev -Dquarkus.http.port=8181Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这会临时更改存储在
/src/main/resources/application.properties文件中的属性值。要永久更改配置值,例如要存储特定于您的开发环境的配置,请将
env-example文件的内容复制到optaweb-vehicle-routing-backend/.env文件。此文件不包括在版本控制中,因此当您克隆存储库时它不存在。您可以在
.env文件中进行更改,而不影响 Git 树。
其他资源
有关 OptaWeb Vehicle Routing 配置属性的完整列表,请参阅 第 16.9 节 “OptaWeb Vehicle Routing 后端配置属性”。
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 应用程序 提供了很多脚本和依赖项,以帮助开发和为生产环境构建应用程序。
先决条件
- OptaWeb Vehicle Routing starter 应用程序已下载并提取。如需更多信息,请参阅 第 16.2 节 “下载并构建 OptaWeb Vehicle Routing 部署文件”。
流程
在 Fedora 中,输入以下命令来设置开发环境:
sudo dnf install npm
sudo dnf install npmCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
将目录更改为
rhdm-7.12.0-kogito-and-optaplanner-quickstarts/optaweb-8.11.1.Final-redhat-00006/optaweb-vehicle-routing/optaweb-vehicle-routing-frontend。 安装
npm依赖项:npm install
npm installCopy to Clipboard Copied! Toggle word wrap Toggle overflow 与 Maven 不同,
npm软件包管理器在项目目录下的node_modules中安装依赖项,并且仅在执行npm install时执行此操作。每当package.json中列出的依赖项更改时,例如,当您拉取对 master 分支的更改时,您必须在运行开发服务器前执行npm install。输入以下命令运行开发服务器:
npm start
npm startCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果没有自动打开,在 Web 浏览器中打开
http://localhost:3000/。默认情况下,
npm start命令尝试在默认浏览器中打开此 URL。注意如果您不希望
npm start命令在每次运行时打开新的浏览器标签页,请导出BROWSER=none环境变量。您可以使用.env.local文件使这个首选项具有持久性。要做到这一点,请输入以下命令:echo BROWSER=none >> .env.local
echo BROWSER=none >> .env.localCopy to Clipboard Copied! Toggle word wrap Toggle overflow 每当您在前端源代码中更改时,浏览器都会刷新页面。终端中运行的开发服务器进程也会获取更改,并将编译和 lint 错误输出到控制台。
输入以下命令运行测试:
npm test
npm testCopy to Clipboard Copied! Toggle word wrap Toggle overflow 更改
REACT_APP_BACKEND_URL环境变量的值,以指定npm start或npm run build时要由npm使用的后端项目的位置,例如:REACT_APP_BACKEND_URL=http://10.0.0.123:8081
REACT_APP_BACKEND_URL=http://10.0.0.123:8081Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意在
npm构建过程中,环境变量在 JavaScript 捆绑包中硬编码,因此您必须在构建和部署前端前指定后端位置。要了解更多有关 React 环境变量的信息,请参阅 添加自定义环境变量。
要构建前端,请输入以下命令之一:
./mvnw install
./mvnw installCopy to Clipboard Copied! Toggle word wrap Toggle overflow mvn install
mvn installCopy to Clipboard Copied! Toggle word wrap Toggle overflow