我们有一个网络应用程序,允许用户上传照片,然后在上传后显示在指定的页面中。上传模块将图像放置在爆炸的战争目录中,例如webapp-root/uploads/
,一旦图像上传,就可以立即查看,如http://mydomain.com/uploads/123.png
.
这是在一台应用服务器上工作的,但事实证明,我们将把这个应用部署到两台负载平衡的服务器上。所以我编写了一个快速文件同步模块,当用户上传图像时,它使用 FTP 在服务器之间同步文件。基本上,当用户在 上上传图像时server1/uploads/
,我会立即通过 FTP 将其复制到server2/uploads/
.
编辑(添加上传过程):上传是这样的:
- 用户选择并提交图像
- 服务器将文件保存在
server1/uploads/
- 后台线程执行从 server1 到
server2/uploads/
(done async)的 FTP 同步 - server2 反之亦然
在这一点上,我遇到了问题。
该 urlhttp://mydomain.com
使用硬件负载平衡器指向 server1 或 server2。如果用户将图像上传test-image.png
到 server1(然后同步到 server2),我假设http://mydomain.com/uploads/test-image.png
无论负载平衡器将我定向到 server1 还是 server2,我都可以访问该图像。
然而事实并非如此。继续该示例,当域指向 server1 时上传的图像只有在重定向到 server1 时才能查看,如果第二个用户访问相同的url 但负载均衡器将他http://mydomain.com/uploads/test-image.png
定向到 server2,则显示为断开的链接。
因此,每当我在其 war 目录中 FTP 复制图像时,JBoss 似乎都不会刷新第二台服务器。这有点奇怪,因为如果我将图像上传到 server1,该服务器上的 JBoss 实例会毫无问题地提供图像文件。
有什么方法可以手动告诉 JBoss “嘿,我们这里有一个新的图像文件”?