14.7. optaweb Vehicle Routing 开发指南
本节论述了如何在开发模式中配置和运行后端模块。
14.7.1. optaweb Vehicle Routing 项目结构 复制链接链接已复制到粘贴板!
OptaWeb Vehicle Routing 项目是一个多模块 Maven 项目。
图 14.1. 模块依赖关系树图
后端和前端模块位于模块树的底部。这些模块包含应用程序源代码。
standalone 模块是一种编译模块,用于将后端和前端合并到单个可执行 JAR 文件中。
distribution 模块代表最终装配步骤。它采用独立应用程序和文档,并将其嵌套在容易分发的存档中。
后端和前端是单独的项目,您可以单独构建和部署。实际上,它们以完全不同的语言编写,并使用不同的工具构建。这两个项目都可以提供现代开发人员体验,并在代码更改和正在运行的应用程序之间快速切换。
下一小节介绍了如何在开发模式下运行后端和前端项目。
14.7.2. OptaWeb Vehicle Routing 后端模块 复制链接链接已复制到粘贴板!
后端模块包含一个服务器端应用程序,它使用红帽构建的 OptaPlanner 来优化载体路由。优化是一个 CPU 密集型计算,必须避免任何 I/O 操作才能对其完整潜在的执行。由于其中一个目标是最大程度降低往返成本,无论是时间还是距离,OptaWeb Vehicle 路由会使传输成本信息保留在 RAM 内存中。OptaPlanner 需要了解用户输入的每一个位置之间的旋转成本。此信息存储在名为 距离列表的结构中。
当您输入新位置时,OptaWeb Vehicle Routing 会计算新位置和目前输入的所有其他位置之间的旋转成本,并将传输成本存储在距离列表中。旋转成本计算由 GraphHopper 路由引擎执行。
后端模块实现以下额外功能:
- Persistence
- 前端的 websocket 连接
- 数据集加载、导出和导入
要了解更多有关后端代码架构的信息,请参阅 第 14.8 节 “optaweb Vehicle Routing 后端架构”。
下一节介绍了如何在开发模式下配置和运行后端。
14.7.2.1. 运行 OptaWeb Vehicle Routing 后端模块 复制链接链接已复制到粘贴板!
您可以在 Quarkus 开发模式下运行后端模块。
先决条件
- 配置了 optaweb Vehicle Routing,如 第 14.4 节 “手动配置和运行 OptaWeb Vehicle Routing” 所述。
流程
-
将目录更改为
rhpam-7.11.0-decision-services-quickstarts/optaweb-8.5.0.Final-redhat-00004/optaweb-vehicle-routing/optaweb-vehicle-routing-backend。 要在开发模式下运行后端,请输入以下命令:
mvn compile quarkus:dev
您可以使用 IntelliJ IDEA Ulitmate 运行 OptaWeb Vehicle Routing 后端模块,以便更轻松地开发您的项目。IntelliJ IDEA Ultimate 包含一个 Quarkus 插件,它为使用 Quarkus 框架的模块自动创建运行配置。
流程
使用 optaweb-vehicle-routing-backend 运行配置来运行后端。
其他资源
如需更多信息,请参阅 运行 Quarkus 应用程序。
14.7.2.3. Quarkus 开发模式 复制链接链接已复制到粘贴板!
在开发模式中,如果更改了后端源代码或配置,并且您刷新前端运行的浏览器标签页,后端会自动重启。
了解有关 Quarkus 开发模式 的更多信息。
14.7.2.4. 更改 OptaWeb Vehicle Routing 后端模块系统属性值 复制链接链接已复制到粘贴板!
您可以临时或永久覆盖 OptaWeb Vehicle Routing 后端模块的默认系统属性值。
OptaWeb Vehicle Routing 后端模块系统属性存储在 /src/main/resources/application.properties 文件中。此文件在版本控制下。使用它永久存储默认配置属性值,并定义 Quarkus 配置集。
先决条件
- OptaWeb Vehicle Routing starter 应用已下载并提取。有关详情请参考 第 14.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这会临时更改存储在
/src/main/resources/application.properties文件中的属性值。要永久更改配置值,例如存储特定于您的开发环境的配置,请将
env-example文件的内容复制到optaweb-vehicle-routing-backend/.env文件中。此文件不包括在版本控制中,因此在克隆存储库时不存在该文件。您可以在
.env文件中进行更改,而不影响 Git 工作树。
其他资源
有关 OptaWeb Vehicle Routing 配置属性的完整列表,请参阅 第 14.9 节 “optaweb Vehicle Routing 后端配置属性”。
14.7.2.5. optaweb Vehicle Routing 后端日志记录 复制链接链接已复制到粘贴板!
optaweb Vehicle Routing 使用 SLF4J API 和 Logback 作为日志记录框架。如需更多信息,请参阅 Quarkus - 配置日志记录。
14.7.3. 使用 OptaWeb Vehicle Routing 前端模块 复制链接链接已复制到粘贴板!
前端项目使用 Create React App 启动。创建 React App 提供了很多脚本和依赖项,可帮助开发并为生产环境构建应用程序。
先决条件
- OptaWeb Vehicle Routing starter 应用已下载并提取。有关详情请参考 第 14.2 节 “下载并构建 OptaWeb Vehicle Routing 部署文件”。
流程
在 Fedora 中,输入以下命令设置开发环境:
sudo dnf install npm-
将目录更改为
rhpam-7.11.0-decision-services-quickstarts/optaweb-8.5.0.Final-redhat-00004/optaweb-vehicle-routing/optaweb-vehicle-routing-frontend。 安装
npm依赖项:npm install与 Maven 不同,
npm软件包管理器会在项目目录下在node_modules中安装依赖项,且仅在执行npm 安装 时才执行。每当package.json中列出的依赖项更改时,例如,当您拉取到 master 分支更改时,您必须在运行开发服务器前执行npm 安装。输入以下命令来运行开发服务器:
npm start如果没有自动打开,在 Web 浏览器中打开
http://localhost:3000/。默认情况下,
npm start命令尝试在默认浏览器中打开此 URL。注意如果您不希望
npm start命令在每次运行时打开新的浏览器标签页,请导出BROWSER=none环境变量。您可以使用.env.local文件使这个首选项永久化。要做到这一点,请输入以下命令:echo BROWSER=none >> .env.local每当在前端源代码中更改时,浏览器都会刷新页面。在终端中运行的开发服务器进程也会选择更改,并将编译和 lint 错误输出到控制台。
输入以下命令来运行测试:
npm test更改
REACT_APP_BACKEND_URL环境变量的值,以指定在执行npm start或 npmrun 构建时由npm使用的后端项目的位置,例如:REACT_APP_BACKEND_URL=http://10.0.0.123:8081注意环境变量在
npm构建过程中在 JavaScript 捆绑包中硬编码,因此您必须在构建和部署前端前指定后端位置。要了解更多有关 React 环境变量的信息,请参阅 添加自定义环境变量。
要构建前端,请输入以下命令之一:
./mvnw installmvn install