在Service Fabric上部署Java应用,体验一把微服务的自动切换
虽然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应用,体验一把微服务的自动切换的更多相关文章
- 【docker】centOS7上部署的mysql和spring boot服务,要求,mysql的时间、java程序服务的时间和宿主机的时间完全保持一致【修改mysql时区,临时和永久】【修改spring boot配置文件时区】【修改docker启动spring boot实例程序时区】
要求:centOS7上部署的mysql和spring boot服务,要求,mysql的时间.java程序服务的时间和宿主机的时间完全保持一致: ============================ ...
- 阿里云esc服务器上部署java项目
文章中使用centos(6和7版本).Xshell.Xftp 因为部署过程直接从操作服务器开始,如果你还没有连接好服务器请参考http://blog.csdn.net/ctrlxv/article/d ...
- 【Maven篇】---解决Maven线上部署java.lang.ClassNotFoundException和no main manifest attribute解决方法
一.前述 maven 线上部署的话会出现一些问题比如java.lang.ClassNotFoundException或者no main manifest attribute的话,是因为maven 配置 ...
- CentOS上部署JAVA服务【转】
http://www.th7.cn/Program/java/201511/686437.shtml 本文将介绍如何在CentOS上运行Java Web服务,其中将包括如何搭建JAVA运行环境.如何开 ...
- windows server服务器上部署java+tomcat网站域名配置
如果只是部署java项目的话,可以把IIS删除,然后在服务器上安装jdk tomcat 配置好环境变量,就和你在自己计算机上开发一样,把你的项目war包拷到tomcat下的webapps里(任意目录都 ...
- 【Azure 微服务】基于已经存在的虚拟网络(VNET)及子网创建新的Service Fabric并且为所有节点配置自定义DNS服务
问题描述 创建新的Service Fabric集群,可以通过门户,Powershell命令,或者是ARM模板.但是通过门户和PowerShell命令时,创建的SF集群都会自动新建一个虚拟网络而无法使用 ...
- 在 Docker 上运行一个 RESTful 风格的微服务
tags: Microservice Restful Docker Author: Andy Ai Weibo:NinetyH GitHub: https://github.com/aiyanbo/d ...
- 全)Java从单体到微服务打造房产销售平台 2018年慕课网 高清视频+源码
第1章 课程介绍本章从整体上介绍课程有什么收获,以及课程如何安排,其中包括微服务的两个不同学习阶段--单体开发阶段(基于SpringBoot)和微服务改造阶段(基于SpringCloud),知识点梳理 ...
- 历史上最详细的SpringCloud搭建微服务的过程。(包括注册中心,服务提供者和服务消费者)
首先搭建注册中心,创建一个springboot的maven工程. 工程创建完成之后,先在资源文件中的application.properties中写配置文件. server.port= spring. ...
随机推荐
- Winform退出程序
1.this.Close(); 只是关闭当前窗口,若不是主窗体的话,是无法退出程序的,另外若有托管线程(非主线程),也无法干净地退出: 2.Application.Exit(); 强制所有消息中止,退 ...
- .net下MD5算法和加盐
MD5方法: public static string GetMD5(string sDataIn) { MD5CryptoServiceProvider md5 ...
- S3C2440之MMU
转自:http://blog.chinaunix.net/uid-23193900-id-3187782.html 1.MMU简介 MMU(Memory Management Unit),内存管 ...
- Hadoop学习1--解决启动过程中的问题
方法:http://www.aboutyun.com/thread-12694-1-1.html http://www.linuxidc.com/topicnews.aspx?tid=13 http: ...
- wordpress主题结构_源码
WordPress博客主题的工作机制 WordPress主题由一系列模板文件组成,每个文件分别控制主题的特定区域.无论你处于哪个页面都能看到的网站的静态部分,由header文件.sidebar和foo ...
- OkHttp 详解
OkHttp使用: http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0106/2275.html OkHttp源码: http:/ ...
- VS2013 越来越慢
Q.VS2013 原来启动只要大概 一两秒的时间,现在启动最少也得十秒以上.而且打开项目也变得很慢了!求解决方案. 清理一下缓存就好了.devenv.exe /resetuserdata 第二:装了v ...
- JVM 类型的生命周期学习
Java虚拟机通过装载.连接和初始化一个JAVA类型,使该类型可以被正在运行的JAVA程序所使用,其中,装载就是把二进制形式的JAVA类型读入JAVA虚拟机中:而连接就是把这种读入虚拟机的二进制形式的 ...
- Codeforces Round #373 (Div. 2)A B
Codeforces Round #373 (Div. 2) A. Vitya in the Countryside 这回做的好差啊,a想不到被hack的数据,b又没有想到正确的思维 = = [题目链 ...
- php 信号量
一些理论基础: 信号量:又称为信号灯.旗语 用来解决进程(线程同步的问题),类似于一把锁,访问前获取锁(获取不到则等待),访问后释放锁. 临界资源:每次仅允许一个进程访问的资源. 临界区:每个进程中访 ...