mch*_*erm 3 java web-services java-ee java-war
我有大量不同的独立(无状态)Web服务,用Java编写并编译为WAR文件.我想将它们部署到单个Web应用程序服务器.
如果每个WAR文件中的服务处理的URI都以我可以用作Web应用程序名称的前缀开头,那么这很容易.例如,我可以
SALES WAR FILE:包含以下代码:
GET http://example.com/sales/widgets
POST http://example.com/sales/widgets
GET http://example.com/sales/sky-hooks营销战争文件:包含以下代码:
获取http://example.com/marketing/widgets
PUT http://example.com/marketing/sky-hooks
...在这种情况下,我只需在名称"sales"和"marketing"下部署两个WAR文件.但是,我不是那么幸运.相反,组件处理的URI路径重叠.像这样的东西:
SALES WAR FILE:包含以下代码:
GET http://example.com/widgets/sales
POST http://example.com/widgets/sales
GET http://example.com/sky-hooks/sales营销战争文件:包含以下代码:
获取http://example.com/widgets/marketing
PUT http://example.com/sky-hooks/marketing
我的问题是如何(如果有的话)我可以在单个Web应用程序服务器上部署它们.
我愿意接受需要大量工作的建议.例如,我最好的想法是在常规URI路径之前构建期望组件名称前缀的服务,然后通过不同的服务器管理所有传入流量,该服务器知道每个URI模式属于哪个组件并将URI修改为添加该前缀.这种方法的难点在于,像Swagger这样的工具读取我的源代码会误解URI的样子.
有任何想法吗?
如果您愿意将apache放在Web容器前,可以使用apache的mod_proxy将请求转发到正确的位置.
可行的一种方法是将单独的战争部署在单独的前缀中,如第一种情况(销售和营销),然后使用ProxyPass将请求发送到正确的位置:
ProxyPass /widget/sales http://example.com/sales/widget
ProxyPass /sky-hooks/sales http://example.com/sales/sky-hooks
ProxyPass /widget/marketing http://example.com/marketing/widget
ProxyPass /sky-hooks/marketing http://example.com/marketing/sky-hooks
Run Code Online (Sandbox Code Playgroud)
尽管重构你的路由可能是一个更好的主意 - 它可能很难维护.
(编辑:我最初建议mod_rewrite,但我想让我的答案更具体,看起来这可以完全用代理完成)
| 归档时间: |
|
| 查看次数: |
979 次 |
| 最近记录: |