1

我想知道是否有人可以向我指出一个很好的教程或博客文章关于编写一个可以在单个进程中运行以在本地进行集成测试但部署时将不同的子系统部署到 heroku 上的不同进程/dynos 的 spring 应用程序。

例如,我的 Web 应用程序中有用户管理、作业处理等服务。我想将它作为本地 Web 应用程序运行。但是当我部署到 heroku 时,我只想将无状态 Web 前端部署到两个 dyno,然后拥有可以选择不同服务运行的工作 dyno。我可能决定将这些服务中的 2 个组合到一个进程中,或者决定每个服务都应该在自己的进程中运行。显然,当服务在自己的进程中运行时,他们将需要透明地添加某种传输方式,如 REST 或 RabbitMQ 或 AKKA 等。

关于从哪里开始学习如何做到这一点的任何指示?还是我想错了,你想建议一种不同的方法?我需要弄清楚如何设置应用程序以及如何构建 maven 和 intellij 来实现这一点。

谢谢。

4

1 回答 1

1

我无法将您指向预制的文章或帖子,但我可以分享我开始解决类似问题的方向。本质上,提议的方法与您的方法相似 - 将具有潜在长期运行逻辑的特定服务放入工作人员测功机中,并通过 RedisToGo 实例(Heroku 附加组件)上的 Jesque(Resque 的 Java 端口)传递消息。我从来没有完全解决单独的 web 与 worker 的 Spring 上下文(转移到其他优先级),但它的要点是 1)web 层应用程序上下文将被配置为发布消息和 2)工作程序应用程序上下文被配置为消费。

也就是说,我使用foreman本地模拟 Heroku 环境来调试缩放(foreman start --formation="web=2"+ Apache mod_proxy_http)。当您扩展到 2+ dynos 时,Spring 遇到了大问题 - 确保在使用webapp-runner. SpringHttpSession默认使用存储安全上下文...没有会话亲和性或本地 Tomcat 会话复制。

最后的警告 - 在我们的例子中,我们的任何工作进程都不需要反映给最终用户。也就是说,我们将 Pusher 用于其他功能(也是 Heroku 插件)。如果您需要在异步任务完成时更新用户,我建议您查看它。

于 2013-08-28T20:42:31.160 回答