JBoss EAP 7 服务器 instance-id 在standalone.xml 上配置,如下所示:
<subsystem xmlns="urn:jboss:domain:undertow:3.1" instance-id="node2">
我有负载平衡和粘性会话的环境。因此,客户端接收到 JSESSIONID cookie,其值为:“ckvLpSqtsN2EjA8WpFqml3UMU5ZIyH2YI29Ir-i.node2”。
问题是:我在 MBean 上(可以访问 FacesContext)。如何获取为请求提供服务的服务器的实例 ID?在上述场景中,“node2”。
我已经尝试过的:
- FacesContext.getCurrentInstance().getExternalContext().getSessionId(true)。
- 不起作用,因为它从 JSESSIONID 中的值中删除了实例 ID。
- 从“Cookie”标头中读取 JSESSIONID 值(可通过 HttpServletRequest 获得)。
- 当用户还没有会话时不起作用(他没有 JSESSIONID cookie)。
我已经考虑通过在环境变量中设置实例 id 并配置standalone.xml 来定义 instance-id="${my.instance.name}" 来避免这个问题。然后,应用程序读取环境变量以获取实例 ID。这是跨 AS 可移植的,但容易出现配置错误。理想情况下,应用程序应该准确地获得 instance-id 上的内容,并且我不需要应用程序是可移植的。
这个问题类似于“Getting instance name of a WebSphere app Server”(Getting instance name of a WebSphere app Server),但针对的是 JBoss EAP 7 服务器。