java - 无法在开发本地机器的服务之间共享共享任务队列和数据存储区 - Google App Engine Java 标准环境
问题描述
具有多种服务的 GAE 应用程序:
module_1 - default
module_2 - backend using datastore
module_3 - Taskqueues and cron job
module_2
被添加为依赖项,module_3
并datastore
使用module_2
. 所有模块(1、2、3 和数据存储)都位于测试和生产中部署的不同虚拟机中。
我在本地开发机器中部署的相同代码,使用命令
gradle appengineRun
所有三个模块
<project_home>/module_<1/2/3>$ gradle appengineRun
,所有项目都创建自己的数据存储和任务队列。
试过以下:
1.调度程序.xml
<?xml version="1.0" encoding="UTF-8"?>
<dispatch-entries>
<dispatch>
<!-- Default module serves the typical web resources and all static resources. -->
<url>*/favicon.ico</url>
<module>module_1</module>
</dispatch>
<dispatch>
<!-- Default module serves simple hostname request. -->
<url>simple-sample.appspot.com/</url>
<module>module_1</module>
</dispatch>
<dispatch>
<!-- Send all mobile traffic to the mobile frontend. -->
<url>*/v2/*</url>
<module>module_2</module>
</dispatch>
<dispatch>
<!-- Send all work to the one static backend. -->
<url>*/v3/*</url>
<module>module_3</module>
</dispatch>
</dispatch-entries>
- 将后端转换为服务:尚未尝试过,这需要大量重构,例如电影
cron.xml
和queue.xml
frommodule_3
tomodule_1
。由于该系统在舞台和生产中使用相同的配置,因此必须有办法使其在本地工作。
解决方案
无论是否将后端实际转换为服务,您需要记住的是队列、数据存储索引、cron 和调度配置是应用程序级别的配置,由所有应用程序的服务共享(无论来自哪个服务它们实际上已部署)。但是在本地开发时,开发服务器可能需要一些实际存在于每个服务中的文件(并且包含跨服务一致的配置)。看到某种相关的我是否需要在每个使用它的微服务(模块)中或仅在根应用程序中定义数据存储索引?. 根据需要,可以将类似的方法应用于其他应用程序级别的共享配置。
由于您的服务共享数据存储,因此为了正确执行本地开发,您还需要单个数据存储模拟。这意味着:
- 在同一本地开发服务器中运行所有服务,并使用该服务器执行的数据存储模拟,可能根据您的#3 参考使用不同的端口,或者
- 在自己的开发服务器中运行每个服务,但让所有这些开发服务器不自己模拟数据存储,而是连接到云数据存储模拟器的单个实例,请参阅(python 上下文)是否可以启动两个 dev_appserver.py 连接到同一个谷歌云数据存储模拟器?
但我不是 Java 用户,我不确定这些方法是否/如何适用于 java,开发服务器与我使用的 python 完全不同。
旁注:您不需要为default
模块添加调度规则 - 这是默认情况下发送不匹配任何其他调度规则的请求的地方。
推荐阅读
- java - Hadoop 计数问题中的 Map Reduce
- c# - C# VSTO - 在 ItemSend 事件处理程序中修改 MailItem?
- java - STS 未连接到 Marketplace
- python - Django 3.1.4 中的密码散列错误 - hashers.py
- flutter - Flutter:如何从浮动操作按钮调用小部件状态类的方法
- bash - jq - 使用 map 函数来保存当前排序的属性顺序
- html - 如何使 Bootstrap 卡拉伸到列内的屏幕高度?
- c# - 如何让我的程序从 C# 中选择随机颜色而不是设置颜色?
- java - 在 Java 中创建不同边缘时链接网格图块的有效方法
- javascript - 试图合并两个对象并在反应中返回合并的对象