如何获取服务请求的 JBoss EAP 7 实例的实例名称 (instance-id)

How to get the instance name (instance-id) of a JBoss EAP 7 instance serving the request

JBoss EAP 7 服务器 instance-id 在 standalone.xml 上配置,如下所示:

<subsystem xmlns="urn:jboss:domain:undertow:3.1" instance-id="node2">

我的环境具有负载平衡和粘性 session。因此,客户端收到 JSESSIONID cookie,其值如下:"ckvLpSqtsN2EjA8WpFqml3UMU5ZIyH2YI29Ir-i.node2".

问题是:我在 MBean 上(可以访问 FacesContext)。我怎样才能得到服务请求的服务器的instance-id?在上面的场景中,"node2".

我已经尝试过的:

  1. FacesContext.getCurrentInstance().getExternalContext().getSessionId(真)。
    • 不起作用,因为它从 JSESSIONID 中的值中删除了 instance-id。
  2. 从 "Cookie" header 中读取 JSESSIONID 值(可通过 HttpServletRequest 获得)。
    • 当用户还没有 session(他没有 JSESSIONID cookie)时不起作用。

我考虑通过在环境变量中设置实例 ID 并配置 standalone.xml 来定义 instance-id="${my.instance.name}" 来避免这个问题。然后,应用程序读取环境变量以获取 instance-id。这是跨 AS 可移植的,但容易出现配置错误。理想情况下,应用程序应该准确获取 instance-id 上的内容,我不需要应用程序可移植。

此问题类似于 "Getting instance name of a WebSphere app Server" (Getting instance name of a WebSphere app Server),但针对的是 JBoss EAP 7 服务器。

我不确定这是错误还是功能,但问题中描述的设置 instance-id 不会更改 jboss.node.name 或 jboss.server.name:

  • jboss.node.name 设置为 主机名;
  • jboss.server.name 设置为 主机名;
  • Cookie JSESSIONID 的末尾附加了 instance-id

However,在 <server> 标签(standalone.xml 上的顶级元素)上添加 name="node123" 属性并删除 instance-id来自undertow的属性有以下效果:

  • jboss.node.name 设置为 "node123";
  • jboss.server.name 设置为 "node123";
  • Cookie JSESSIONID 在末尾附加了 "node123"。

这不是我所期待的答案,但我发现它比定义自定义 属性 并确保 属性 在 "instance-id" 上更容易接受。

它可能与问题没有直接关系,但在 wildfly10 中执行一些测试后,我们得出以下与节点之间唯一的不同属性相关的结论:

  • -Djboss.node.name=clusternode1 唯一标识集群中的每个节点。您可以在日志中看到它。如果缺少 jboss.server.name 的值,通常是主机名。

  • <subsystem xmlns="urn:jboss:domain:undertow:3.1" instance-id="node1" 这会影响每个节点生成的 return cookie。负载均衡器可以利用它来维护粘性会话,而无需跟踪 cookie。 例如:如果 cookie 以 .node1 为后缀,我将在 backend-server1 上发送它/如果 cookie 以 .node2 为后缀,我将在 backend-server2

  • 上发送它
  • <subsystem xmlns="urn:jboss:domain:transaction:3.0"> <core-environment node-identifier="node1" 文档说它应该是独一无二的。 这用于 以防多个服务器 运行 在同一主机 上。看这张图:operating-modes 如果您保留默认值,您将收到警告。 wildfly11 中的警告更改为更具描述性:https://github.com/wildfly/wildfly/commit/732429b98fc08a01410058a707c73c1dd52c75b1