在同一服务器上同时部署两个相同的服务,报Communication problem

同一服务器,不同的数据库,端口不同
在浏览器上同时打开两个页面时报Communication problem

你好,看看下面我的理解对不对:

  1. 一台服务器上,部署了两个相同的服务。
  2. 两个服务有各自的数据库。
  3. 两个服务对外通过不同的端口提供服务。
  4. 这种情况下,访问 CUBA UI 出现 communication problem。

是的,在同一浏览器里打开一个页面后,再打开另一个第一个就会communication problem,然后再点第一个时第二个又会communication problem

不同浏览器中打开是正常的

有用到负载均衡吗?cuba 程序是运行在 tomcat 内,还是有别的中间件?

两个都是使用docker启动的

ip:port1/app1

ip:port2/app2

我记得app1 app2不能一样。 你先手动测试一下,应该跟docker关系不大,人工起两个cuba服务测测app1 app2是不是必须不同。

如果证明了是app1 app2的问题:

因为你已经打到docker里了,webapp下的app app-core不能变化了。 这里假定你用的tomcat:
你可以在tomcat的conf/server.xml 里配置一下:

 <Context crossContext="true" docBase="/yourlocation/webapps/app" path="/${app.id}" />
 <Context crossContext="true" docBase="/yourlocation/webapps/app-core" path="/${app.id}-core">

这样通过 ip:port/${app.id} 访问你的服务,tomcat会给你匹配到webapps/app。
更具体的搜索下crossContext的定义和配置。

{app.id}怎么定义? 在启动docker的时候传一个变量APP_ID 给 docker容器:

docker run -d -t -i \
  -e APP_ID=${APP_ID} \

在docker容器你指定的run.sh里把上面的APP_ID传给tomcat:

export JAVA_OPTS="$JAVA_OPTS \
               -Dapp.id=${APP_ID} \

这样tomcat就知道 {app.id}的值了。

由于改变了cuba的app,连带需要重新定义一些变量,我能查到的有:
/WEB-INF/local.app.properties 里, 涉及的变量有:

cuba.webAppUrl = https://${host}:${ssl.server.port}/${app.id}/
cuba.webUrl = https://${host}:${ssl.server.port}/
cuba.webContextName = ${app.id}-core
cuba.webHostName=${host}
cuba.webPort = ${ssl.server.port}

web.xml里保证配置了/WEB-INF/local.app.properties

	<context-param>
		<param-name>appPropertiesConfig</param-name>
		<param-value>classpath:cuba-web-app.properties
			classpath:cn/com/xxx/xxx/web-app.properties
			/WEB-INF/local.app.properties
	</context-param>