8.14. 为多个可引导 JAR 实例启用 Web 会话数据存储
您可以将 web-clustering 应用程序构建并打包为可引导 JAR。
先决条件
-
您已检查了最新的 Maven 插件版本,如
MAVEN_PLUGIN_VERSION.X.GA.Final-redhat-00001,其中 MAVEN_PLUGIN_VERSION 是主版本,X 是 microversion。请参阅 /ga/org/wildfly/plugins/wildfly-jar-maven-plugin 的索引。 -
您已检查了最新的 Galleon 功能软件包版本,如
4.0.X.GA-redhat-BUILD_NUMBER,其中 X 是 JBoss EAP XP 的微版本,BUILD_NUMBER 是 Galleon 功能软件包的构建号。X 和 BUILD_NUMBER 可以在 JBoss EAP XP 4.0.0 产品生命周期中演进。请参阅 /ga/org/jboss/eap/wildfly-galleon-pack 的索引。 您已创建了 Maven 项目,设置父依赖项,并添加了用于创建 Web 集群应用程序的依赖项。请参阅 创建可引导 JAR Maven 项目。
重要在设置 Maven 项目时,您必须在 Maven archetype 配置中指定值。例如:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意流程中显示的示例指定以下属性:
-
${bootable.jar.maven.plugin.version}用于 Maven 插件版本。 -
${jboss.xp.galleon.feature.pack.version}用于 Galleon 功能软件包版本。
您必须在项目中设置这些属性。例如:
<properties> <bootable.jar.maven.plugin.version>6.1.2.Final-redhat-00001</bootable.jar.maven.plugin.version> <jboss.xp.galleon.feature.pack.version>4.0.0.GA-redhat-00002</jboss.xp.galleon.feature.pack.version> </properties><properties> <bootable.jar.maven.plugin.version>6.1.2.Final-redhat-00001</bootable.jar.maven.plugin.version> <jboss.xp.galleon.feature.pack.version>4.0.0.GA-redhat-00002</jboss.xp.galleon.feature.pack.version> </properties>Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
流程
在
pom.xml文件的<build> 元素中添加以下内容。您必须指定任何 Maven 插件的最新版本,以及org.jboss.eap:wildfly-galleon-packGalleon 功能软件包的最新版本。例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意这个示例使用
web-clusteringGalleon 层启用 Web 会话共享。使用以下配置更新
src/main/webapp/WEB-INF目录中的web.xml文件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow &
lt;distributable/> 标签表示此 servlet 可以在多个服务器间分布。创建用于存储 Java 文件的目录:
mkdir -p APPLICATION_ROOT /src/main/java/com/example/webclustering/
$ mkdir -p APPLICATION_ROOT /src/main/java/com/example/webclustering/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中
APPLICATION_ROOT是包含应用的pom.xml配置文件的目录。创建包含以下内容的 Java 文件
MyServlet.java,并将该文件保存到APPLICATION_ROOT/src/main/java/com/example/webclustering/目录中。Copy to Clipboard Copied! Toggle word wrap Toggle overflow MyServlet.java中的内容定义客户端向其发送 HTTP 请求的端点。创建包含以下内容的 Java 文件
User.java,并将文件保存到APPLICATION_ROOT/src/main/java/com/example/webclustering/目录中。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 打包应用程序:
mvn package
$ mvn packageCopy to Clipboard Copied! Toggle word wrap Toggle overflow 可选 : 要在 JBoss EAP 裸机平台上运行应用程序,请按照 在 JBoss EAP 裸机平台上使用可引导 JAR 中所述的步骤进行,但有以下区别:
在 JBoss EAP 裸机平台上,您可以使用
java -jar命令运行多个可引导 JAR 实例,如下例所示:java -jar target/web-clustering-bootable.jar -Djboss.node.name=node1 java -jar target/web-clustering-bootable.jar -Djboss.node.name=node2 -Djboss.socket.binding.port-offset=10
$ java -jar target/web-clustering-bootable.jar -Djboss.node.name=node1 $ java -jar target/web-clustering-bootable.jar -Djboss.node.name=node2 -Djboss.socket.binding.port-offset=10Copy to Clipboard Copied! Toggle word wrap Toggle overflow 验证 :您可以访问节点 1 实例中的应用程序: http://127.0.0.1:8080/clustering。记录用户会话 ID 和用户创建时间。
终止此实例后,您可以访问节点 2 实例: http://127.0.0.1:8090/clustering。用户必须与会话 ID 和节点 1 实例的用户创建时间匹配。
可选 : 要在 JBoss EAP OpenShift 平台上运行应用程序,请按照 在 JBoss EAP OpenShift 平台上使用可引导 JAR 中所述的步骤,但完成以下步骤:
在插件配置中添加
<cloud/> 元素。例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重建应用程序:
mvn clean package
$ mvn clean packageCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
使用
oc login命令登录到您的 OpenShift 实例。 在 OpenShift 中创建一个新项目。例如:
oc new-project bootable-jar-project
$ oc new-project bootable-jar-projectCopy to Clipboard Copied! Toggle word wrap Toggle overflow 若要在 JBoss EAP OpenShift 平台上运行 web-clustering 应用,必须为 Pod 在其中运行的服务帐户授予授权访问权限。然后,服务帐户可以访问 Kubernetes REST API。以下示例显示了为服务帐户授予授权访问权限:
oc policy add-role-to-user view system:serviceaccount:$(oc project -q):default
$ oc policy add-role-to-user view system:serviceaccount:$(oc project -q):defaultCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下
oc命令来创建应用程序镜像:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 部署应用程序:
oc new-app web-clustering -e KUBERNETES_NAMESPACE=$(oc project -q) oc expose svc/web-clustering
$ oc new-app web-clustering -e KUBERNETES_NAMESPACE=$(oc project -q) $ oc expose svc/web-clusteringCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重要您必须使用
KUBERNETES_NAMESPACE环境变量查看当前 OpenShift 命名空间中的其他 pod;否则,服务器会尝试从default命名空间检索 pod。获取路由的 URL。
oc get route web-clustering --template='{{ .spec.host }}'$ oc get route web-clustering --template='{{ .spec.host }}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用上一命令返回的 URL,访问 Web 浏览器中的应用。例如:
http://ROUTE_NAME/clustering
http://ROUTE_NAME/clusteringCopy to Clipboard Copied! Toggle word wrap Toggle overflow 记录用户会话 ID 和用户创建时间。
将应用程序扩展到两个 pod:
oc scale --replicas=2 deployments web-clustering
$ oc scale --replicas=2 deployments web-clusteringCopy to Clipboard Copied! Toggle word wrap Toggle overflow 发出以下命令来查看可用的 OpenShift pod 列表,并检查 pod 构建状态:
oc get pods
$ oc get podsCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
使用
oc delete pod web-clustering-POD_NAME命令终止最旧的 pod,其中 POD_NAME 是最旧的 pod 的名称。 再次访问应用程序:
http://ROUTE_NAME/clustering
http://ROUTE_NAME/clusteringCopy to Clipboard Copied! Toggle word wrap Toggle overflow 预期的结果:会话 ID 和新 pod 生成的创建时间与终止的 pod 的创建时间匹配。这表示启用了 Web 会话数据存储。