JBoss EAP 7服务器实例标识在standalone.xml上配置,如下所示:
<subsystem xmlns="urn:jboss:domain:undertow:3.1" instance-id="node2">
我有环境负载均衡和粘性会话。因此,客户端接收带有类似值的JSESSIONID cookie作为值:“ckvLpSqtsN2EjA8WpFqml3UMU5ZIyH2YI29Ir-i.node2”。
问题是:我在MBean上(可以访问FacesContext)。如何获取为请求提供服务的服务器的instance-id?在上面的场景中,“node2”。
我已经尝试过:
我已经考虑通过在环境变量中设置实例id并配置standalone.xml来定义instance-id =“$ {my.instance.name}”来避免此问题。然后,应用程序读取环境变量以获取instance-id。这是可移植的AS,但容易出现配置错误。理想情况下,应用程序应该获得与instance-id完全相同的内容,并且我不需要应用程序可移植。
此问题类似于“获取WebSphere app Server的实例名称”(Getting instance name of a WebSphere app Server),但是对于JBoss EAP 7服务器。
答案 0 :(得分:1)
我不确定它是错误还是功能,但问题中描述的设置instance-id不会改变jboss.node.name或jboss.server.name:
但是,在<server>
标记(standalone.xml上的顶级元素)上添加name =“node123”属性并从underow中删除instance-id属性会产生以下影响:
这不是我期望的答案,但我发现它比定义自定义属性并确保该属性位于“instance-id”更容易接受。
答案 1 :(得分:0)
它可能与问题没有直接关系,但是在wildfly10中执行了一些测试后,我们得出以下结论,这些关系与节点之间唯一的不同属性有关:
-Djboss.node.name=clusternode1
唯一标识集群中的每个节点。您可以在日志中看到它。如果缺少jboss.server.name
的值,通常使用主机名。
<subsystem xmlns="urn:jboss:domain:undertow:3.1" instance-id="node1"
这会影响每个节点生成的返回cookie。负载均衡器可以使用它来维护粘性会话,而无需跟踪cookie。
例如:如果cookie后缀为.node1
,我将在后端服务器1上发送它;如果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