You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WildFly 32.0.1部署互通信双应用遇访问异常求助

问题分析与解决方案

核心问题梳理

  1. Spring Boot端口配置无效:部署到WildFly的WAR包,application.properties中的server.port会被容器忽略,端口由WildFly的Socket Binding和Undertow配置决定。
  2. 虚拟主机与监听器未绑定:额外创建的HTTP监听器未关联到对应虚拟主机,导致访问端口时仍路由到默认主机的欢迎页。
  3. Socket Binding端口冲突:配置中connex-http和http3都使用8888端口,引发端口占用问题。
  4. 虚拟主机访问逻辑不匹配:未正确关联监听器与主机,导致WildFly无法识别不同端口对应的应用。

具体修复步骤

1. 修正Socket Binding端口冲突

编辑standalone.xml的socket-binding-group,删除重复端口配置,保留清晰的绑定关系:

<socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:0}">
    <socket-binding name="ajp" port="${jboss.ajp.port:8009}"/>
    <socket-binding name="http" port="${jboss.http.port:8080}"/>
    <!-- 为两个应用分别配置独立端口,命名更清晰 -->
    <socket-binding name="xsupport-http" port="8889"/>
    <socket-binding name="connex-http" port="8888"/>
    <socket-binding name="https" port="${jboss.https.port:8443}"/>
    <socket-binding name="management-http" interface="management" port="${jboss.management.http.port:9990}"/>
    <socket-binding name="management-https" interface="management" port="${jboss.management.https.port:9993}"/>
    <socket-binding name="tenant-http" interface="public" port="8887" fixed-port="false"/>
    <socket-binding name="txn-recovery-environment" port="4712"/>
    <socket-binding name="txn-status-manager" port="4713"/>
    <outbound-socket-binding name="mail-smtp">
        <remote-destination host="${jboss.mail.server.host:localhost}" port="${jboss.mail.server.port:25}"/>
    </outbound-socket-binding>
</socket-binding-group>

2. 绑定HTTP监听器与虚拟主机

修改Undertow子系统配置,让每个监听器默认关联对应虚拟主机,确保访问指定端口时直接路由到目标应用:

<subsystem xmlns="urn:jboss:domain:undertow:14.0" statistics-enabled="true">
    <byte-buffer-pool name="default" buffer-size="1024" max-pool-size="1024"/>
    <buffer-cache name="default"/>
    <server name="default-server">
        <http-listener name="default" socket-binding="http" buffer-pool="default" redirect-socket="https" enable-http2="true"/>
        <!-- 给xsupport应用的监听器指定默认主机 -->
        <http-listener name="xsupport-http" socket-binding="xsupport-http" buffer-pool="default" enable-http2="true" default-host="xsupport-web"/>
        <!-- 给connex应用的监听器指定默认主机 -->
        <http-listener name="connex-http" socket-binding="connex-http" buffer-pool="default" enable-http2="true" default-host="connex"/>
        <https-listener name="https" socket-binding="https" buffer-pool="default" ssl-context="applicationSSC" enable-http2="true"/>
        
        <host name="default-host" alias="localhost">
            <location name="/" handler="welcome-content"/>
            <filter-ref name="server-header"/>
            <filter-ref name="x-powered-by-header"/>
        </host>
        <!-- 配置xsupport应用的虚拟主机,指定默认WAR包 -->
        <host name="xsupport-web" alias="xsupport.com" default-web-module="xsupport-tool-1.0.0.war"/>
        <!-- 配置connex应用的虚拟主机,指定默认WAR包 -->
        <host name="connex" alias="connex-api.com" default-web-module="connex-1.0.0.war"/>
    </server>
    <servlet-container name="default">
        <jsp-config/>
        <websockets/>
    </servlet-container>
    <handlers>
        <file name="welcome-content" path="${jboss.home.dir}/welcome-content"/>
    </handlers>
    <filters>
        <response-header name="server-header" header-name="Server" header-value="WildFly/18"/>
        <response-header name="x-powered-by-header" header-name="X-Powered-By" header-value="Undertow/1"/>
    </filters>
</subsystem>

3. 移除Spring Boot的无效端口配置

编辑两个应用的application.properties,删除server.port配置(容器部署时该配置不生效):

  • App A(xsupport-tool):
spring.config.import=classpath:api-endpoints.properties
server.servlet.session.timeout=450m
spring.main.allow-bean-definition-overriding=true
  • App B(connex):
spring.config.import=classpath:query-config.properties
apiPrefix=/api
web.endpoint=http://localhost:8887/
logging.level.org.springframework.jdbc.core=TRACE
spring.main.allow-bean-definition-overriding=true
management.endpoints.web.exposure.include=*

4. 验证应用部署状态

登录WildFly管理控制台(http://localhost:9990),确认两个WAR包均处于已启动状态,且default-web-module配置的文件名与实际部署的WAR包完全一致(包括版本号)。

5. 测试访问与应用间通信

  • 访问App A的UI:http://localhost:8889
  • 访问App B的API:http://localhost:8888/api/xxx(替换xxx为具体接口路径)
  • App A调用App B时,直接使用http://localhost:8888/api/xxx作为请求地址即可。

内容的提问来源于stack exchange,提问作者Lehlohonolo Nkosi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 01:33:15