【问题标题】:How to get the instance name (instance-id) of a JBoss EAP 7 instance serving the request如何获取服务请求的 JBoss EAP 7 实例的实例名称(instance-id)
【发布时间】:2017-06-04 13:26:38
【问题描述】:

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”。

我已经尝试过的:

  1. FacesContext.getCurrentInstance().getExternalContext().getSessionId(true)。
    • 不起作用,因为它会从 JSESSIONID 中的值中去除实例 ID。
  2. 从“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 服务器。

【问题讨论】:

  • 试试System.getProperty("jboss.node.name")

标签: java jakarta-ee jboss jboss-eap-7


【解决方案1】:

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

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

然而,在&lt;server&gt; 标签(standalone.xml 上的顶级元素)上添加 name="node123" 属性并从 undertow 中删除 instance-id 属性具有以下效果:

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

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

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-08
      • 2018-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-24
      • 2013-08-22
      相关资源
      最近更新 更多