问题描述:
启用jboss多个实例,可能会遇到端口冲突。 比如http端口,jms端口等等。
解决方案:
默认情况下,jboss的端口定义在内置Tomcat的server.xml里面配置。如果开启多个实例,那么就要依次更新这几个文件的端口,相当麻烦。jboss提供了一个很方便的mbean来
统一管理多实例配置 --ServiceBindingManager。
基本思想如下:
jboss提供一个服务器端口绑定文件--xxx-bindings.xml,里面定义了多个以server-name为标志的端口,它就作为统一的端口绑定配置文件。然后在每个服务器实例的jboss-server.xml中注册一个端口绑定服务ServiceBindingManager,该服务用参数
--ServerName:指定xxx-bindings.xml对应的端口配置
--StoreURL: 指定xx-bindings.xml文件的位置
一旦该服务注册,则Tomcat下server.xml的端口设置被忽略,而启用新的端口配置。
实施步骤:
1.拷贝${jboss_home}\docs\examples\binding-manager\sample-bindings.xml的文件到${jboss_home}\server下,重新命名为server-bindings.xml(可以不拷贝,拷贝是因为结构清晰)。 文件里面已经内置了4个server的端口绑定,因此在默认情况下,你至少可以启用4个jboss服务实例。
2. 修改server-bindings.xml文件中需要启动的ServerName的tomcat启动端口.例如:ports-default的tomcat<binding port="8080"/>修改为<binding port="8081"/>;ports-default的tomcat<binding port="8180"/>修改为<binding port="8888"/>
3. 修改每个jboss服务实例下的jboss-server.xml文件,把Service Binding配置的注释去掉,修改其中参数serverName和server-bindings.xml文件的路径。
比如default下的的jboss-server.xml文件ServiceBindingManager改为:
<mbean code="org.jboss.services.binding.ServiceBindingManager"
name="jboss.system:service=ServiceBindingManager">
<attribute name="ServerName">ports-default</attribute>
<attribute name="StoreURL">${jboss.home.url}/server/server-bindings.xml</attribute>
<attribute name="StoreFactoryClassName">
org.jboss.services.binding.XMLServicesStoreFactory
</attribute>
</mbean>
test下的的jboss-server.xml文件ServiceBindingManager改为:
<mbean code="org.jboss.services.binding.ServiceBindingManager"
name="jboss.system:service=ServiceBindingManager">
<attribute name="ServerName">ports-01</attribute>
<attribute name="StoreURL">${jboss.home.url}/server/server-bindings.xml</attribute>
<attribute name="StoreFactoryClassName">
org.jboss.services.binding.XMLServicesStoreFactory
</attribute>
</mbean>
4. (这个步骤不知道是不是必须的)修改每个jboss服务实例下的Tomcat的配置文件server.xml文件的端口,使其与server-bindings.xml文件中的端口相对应.例如:default下的server.xml中的
<!-- A HTTP/1.1 Connector on port 8080 -->为8081;test下的server.xml中的
<!-- A HTTP/1.1 Connector on port 8080 -->为8888;
5. 启动各个服务实例。 run.bat -c xxx。假如你有2个实例default, test,则运行:
run.bat -c default
run.bat -c test