虽然Service Fabric的Java支持版本还没有正式发布,但是Service Fabric本身的服务管理、部署、升级等功能是非常好用的,那么Java的开发者可以如何利用上Service Fabric的这个功能呢?答案很简单,其实只要利用Service Fabric的Deploy Guest Executable就好了,也就是说Service Fabric是允许部署一个或者多个独立运行的exe,并且运行在Service Fabric的节点中的。详细的信息可以参看官方的这个文档:

https://azure.microsoft.com/zh-cn/documentation/articles/service-fabric-deploy-existing-app/

下面我就拿部署Java的Jetty做个样例:

首先我们用Visual Studio创建一个Service Fabric的Application

在向导的界面上选择我们先将主要参数留空,将Working Folder的选项从默认的Work改成CodeBase

创建好工程后,我们在jettyonjavaPkg的目录下创建一个名字为Code的目录,并且将事先下载好的Java的SDK和Jetty拷入Code目录下

文件拷贝完成后,就可以编辑ServiceManifest.xml了。主要是要修改EntryPoint这一节

<EntryPoint>
<ExeHost>
<Program>java\bin\java.exe</Program>
<Arguments>-Djetty.port=8080 -Djetty.base=..\..\jetty -jar ..\..\jetty\start.jar</Arguments>
<WorkingFolder>CodeBase</WorkingFolder> <!-- Uncomment to log console output (both stdout and stderr) to one of the
service's working directories. -->
<!-- <ConsoleRedirection FileRetentionCount="5" FileMaxSizeInKb="2048"/> -->
</ExeHost>
</EntryPoint>

其中Program里面我们会调用Java.exe文件,然后在Arguments里面填入Jetty的相关参数,这里要注意的是Program里面不能使用批处理文件,因为Service Fabric的服务监控需要跟踪Exe的进程ID,以便当进程出问题时能够及时切换到其他节点里去。如果你的Program里面指定的是批处理文件.bat的话,虽然这个批处理会执行,但是由于拿不到进程ID,所以Service Fabric会不断的去Call这个批处理的,这也是为什么我选择Jetty而不是常见的Tomcat容器的原因。

编辑好了EntryPoint了,因为jetty是要提供Web服务的,我们需要告诉Service Fabric,这个Application提供的是什么端口服务,所以我们还需要编辑Resources节

<Resources>
<Endpoints>
<!-- This endpoint is used by the communication listener to obtain the port on which to
listen. Please note that if your service is partitioned, this port is shared with
replicas of different partitions that are placed in your code. -->
<Endpoint Name="tomcatTypeEndpoint" Protocol="http" Port="8080" Type="Input" />
</Endpoints>
</Resources>

在Endpoint的设置里面可以看到发布的8080 http端口跟前面一节的参数里面启动Jetty的参数8080是一致的。

做完这些设置,我们再在jetty的webapps的Root里面放入一个index.jsp,以便验证下我们的jetty是不是发布在Service Fabric上的

这个jsp的代码比较简单,就是用来显示下Java版本啥的

<!DOCTYPE html>
<html>
<head>
<title>Microsoft Service Fabric on Java - Welcome</title> </head>
<body bgcolor="#00abec" >
<div id="feature">
<div id="content">
<h2>Service Fabric on Java,Node Address is:<%out.print(request.getLocalAddr());%></h2> <br/>
<table width="750" frame="below">
<tr bgcolor="rgb(13,188,242)">
<th align="left" width="200"> Java Property </th>
<th align="left" width="500"> Value </th>
</tr>
<%@ page import="java.util.*" %>
<%
ArrayList<String> mainPageProps = new ArrayList<String>();
mainPageProps.add("java.version");
mainPageProps.add("java.vendor");
mainPageProps.add("os.arch");
mainPageProps.add("catalina.base");
mainPageProps.add("jetty.base");
mainPageProps.add("user.timezone");
for(String name : mainPageProps)
{
String value = System.getProperty(name);
if(value != null)
{
out.print("<tr><td>" + name);
out.print("</td><td>" + value );
out.print("</td></tr>");
}
}
%>
</table>
</font>
</div>
</div>
</body> </html>

准备好了,我们就可以在VS上面按F5,将程序部署到本地的集群里面进行测试了。

这时候打开浏览器访问http://localhost:8080/index.jsp 这样我们就可以看到我们刚才准备好的jsp文件了

从上面的截图,可以看出来Jetty是运行在Node_4上的,我们试试从Service Fabric Explorer里把节点4重启一下,

用浏览器访问http://localhost:19080

这时候,我们会发现Service Fabric的群集很快帮我们吧应用迁移到了Node_0

这样我们很容易就体验到了Service Fabric帮我们管理服务的健康,实现应用快速迁移的功能。当然Service Fabric还支持服务本身的负载均衡的,但是由于本机没法两个应用同时发布8080端口,我们只能等Java版本的Service Fabric Service SDK发布或者将应用部署到云上面才能体验了。

在Service Fabric上部署Java应用,体验一把微服务的自动切换的更多相关文章

  1. 【docker】centOS7上部署的mysql和spring boot服务,要求,mysql的时间、java程序服务的时间和宿主机的时间完全保持一致【修改mysql时区,临时和永久】【修改spring boot配置文件时区】【修改docker启动spring boot实例程序时区】

    要求:centOS7上部署的mysql和spring boot服务,要求,mysql的时间.java程序服务的时间和宿主机的时间完全保持一致: ============================ ...

  2. 阿里云esc服务器上部署java项目

    文章中使用centos(6和7版本).Xshell.Xftp 因为部署过程直接从操作服务器开始,如果你还没有连接好服务器请参考http://blog.csdn.net/ctrlxv/article/d ...

  3. 【Maven篇】---解决Maven线上部署java.lang.ClassNotFoundException和no main manifest attribute解决方法

    一.前述 maven 线上部署的话会出现一些问题比如java.lang.ClassNotFoundException或者no main manifest attribute的话,是因为maven 配置 ...

  4. CentOS上部署JAVA服务【转】

    http://www.th7.cn/Program/java/201511/686437.shtml 本文将介绍如何在CentOS上运行Java Web服务,其中将包括如何搭建JAVA运行环境.如何开 ...

  5. windows server服务器上部署java+tomcat网站域名配置

    如果只是部署java项目的话,可以把IIS删除,然后在服务器上安装jdk tomcat 配置好环境变量,就和你在自己计算机上开发一样,把你的项目war包拷到tomcat下的webapps里(任意目录都 ...

  6. 【Azure 微服务】基于已经存在的虚拟网络(VNET)及子网创建新的Service Fabric并且为所有节点配置自定义DNS服务

    问题描述 创建新的Service Fabric集群,可以通过门户,Powershell命令,或者是ARM模板.但是通过门户和PowerShell命令时,创建的SF集群都会自动新建一个虚拟网络而无法使用 ...

  7. 在 Docker 上运行一个 RESTful 风格的微服务

    tags: Microservice Restful Docker Author: Andy Ai Weibo:NinetyH GitHub: https://github.com/aiyanbo/d ...

  8. 全)Java从单体到微服务打造房产销售平台 2018年慕课网 高清视频+源码

    第1章 课程介绍本章从整体上介绍课程有什么收获,以及课程如何安排,其中包括微服务的两个不同学习阶段--单体开发阶段(基于SpringBoot)和微服务改造阶段(基于SpringCloud),知识点梳理 ...

  9. 历史上最详细的SpringCloud搭建微服务的过程。(包括注册中心,服务提供者和服务消费者)

    首先搭建注册中心,创建一个springboot的maven工程. 工程创建完成之后,先在资源文件中的application.properties中写配置文件. server.port= spring. ...

随机推荐

  1. Implement Custom Cache Dependencies in ASP.NET 1.x

    Code download available at:CuttingEdge0407.exe(128 KB)   Contents What's a Cache Dependency, Anyway? ...

  2. [转] iOS (OC) 中 KVC 与 KVO 理解

    转自: http://magicalboy.com/kvc_and_kvo/ KVC 与 KVO 是 Objective C 的关键概念,个人认为必须理解的东西,下面是实例讲解. Key-Value ...

  3. NYOJ 104 最大子矩阵(二维DP)

    最大和 时间限制:1000 ms  |  内存限制:65535 KB 难度:5 描写叙述 给定一个由整数组成二维矩阵(r*c),如今须要找出它的一个子矩阵,使得这个子矩阵内的全部元素之和最大,并把这个 ...

  4. tomcat8.0部署启动

    http://tomcat.apache.org/download-80.cgi 打开命令行提示符窗口, 进入Tomcat安装目录, 进入bin目录下, 输入:service.bat install  ...

  5. 分数模板(C++模板)

    貌似没什么用...没有多少毒瘤题要输出分数吧... update:真的有,而且在NOIP模拟赛里出现了!写double的卡精度到怀疑人生! 可以套个兼容性比较好的高精度模板进来. #include&l ...

  6. 【题解】Luogu P2604 [ZJOI2010]网络扩容

    原题传送门:P2604 [ZJOI2010]网络扩容 这题可以说是板题 给你一个图,先让你求最大流 再告诉你,每条边可以花费一些代价,使得流量加一 问至少花费多少代价才能使最大流达到k 解法十分简单 ...

  7. 运用active和hover实现导航栏的页面切换

    .nav ul li a:hover{ background: #3E6EDD;}.nav ul li a:hover img{ display: block;}.nav ul li a.active ...

  8. log4j 将日志文件输出到web-inf下的解决办法

    参考链接:http://blog.csdn.net/chenfengdejuanlian/article/details/70738995 只需要配置好即可,用的时候直接在代码中获得记录器记录,监听器 ...

  9. linux 链接命令

    ln link /bin/ln -s 创建软链接ln -s [原文件] [链接文件] 软链接 ln -s /etc/issue /tmp/issue.soft硬链接ln /etc/issue /tmp ...

  10. Python-Image 基本的图像处理操作

    Python-Image 基本的图像处理操作,有需要的朋友可以参考下. Python 里面最常用的图像操作库是 Image library(PIL),功能上,虽然还不能跟Matlab比较,但是还是比较 ...