通过界面控制java程序的启停,一种服务监控及管理的方法与流程

bf461b757b5c8008e504df713be6c7e5.gif

本发明涉及计算机软件微服务架构服务管理技术,尤其涉及一种服务监控及管理的方法。

背景技术:

在当前软件框架技术中,微服务框架已经日渐流行。所谓微服务框架,是将把一个大型的单个应用程序和服务,根据功能、业务或者特定的需求进行拆分,拆分为数个甚至数十个的支持微服务。围绕业务领域组件来创建应用,这些应用可独立地进行开发、管理和迭代。在分散的组件中使用云架构和平台式部署、管理和服务功能,使产品交付变得更加简单。

但是现有的微服务架构中,没有提供服务管理相关的接口、功能或服务,需要开发者自己根据需求实现。因此,开发一套管理后台微服务的功能势在必行。

技术实现要素:

为了解决以上技术问题,本发明提出了一种服务监控及管理的方法,能够实时监测微服务架构下,各个服务的运行情况,并根据需要,控制服务的启动和停止。该功能需要与微服务功能相对独立,针对微服务起到监控作用。因此该功能需要脱离微服务框架实现。

本发明的技术方案是:

一种服务监控及管理的方法,在微服务架构下,通过自动扫描获取各服务的运行状态返回信息,通过脚本对各微服务进行启动或停止操作;并针对所有可见微服务进行权限分类,区分服务管理权限:

A、通过功能配置,将服务信息提前预置;

B、通过访问微服务注册中心接口获取已注册服务信息;

C、通过注册信息匹配,显示服务活跃状态;

D、通过shell脚本远程控制微服务单个服务启停;

E、通过用户角色控制服务管理权限。

在A中,可增删改查维护服务信息,批量维护数据。

在B中,服务一键获取所有微服务信息,同步至数据库中;

程序调用微服务注册中心REST接口,获取服务器信息。

在C中,解析注册中心反馈信息,匹配服务活跃度,并反馈给用户;通过定时任务,实时更新服务状态。

在D中,针对不同服务,配置shell脚本;调用shell脚本,控制服务启动或者停止。

在E中,关联用户角色表,控制不同角色管理不同服务。

本发明通过自动扫描获取各服务的运行状态返回信息,便于服务管理人员及时对异常服务进行维护,同时还可以通过脚本对各微服务进行启动或停止操作。针对所有可见微服务进行了权限分类,不同权限操作人员管理不同类别的服务。

附图说明

图1是服务状态及信息获取逻辑图;

图2是本发明的功能实现图。

具体实施方式

下面对本发明的内容进行更加详细的阐述:

1、界面原型

该界面中默认展示当前用户可查看的所有服务信息。其中包括:服务名称、服务描述、服务IP、服务端口及服务状态。输入服务名称或服务IP点击查询(支持模糊,分页),同时可以选定服务状态进行条件查询(支持分页)。

点击“停止服务”按钮,弹出提示框。点击确定,执行停止服务操作,同时服务状态变为“停止中”。当自动扫描发现服务已经停止后,将状态改为“停止”。按钮变为“启动服务”。

点击启动服务按钮,弹出提示框。点击确定,执行启动服务操作,同时服务状态变为启动中。当自动扫描发现服务已经停止后,将状态改为“启动”。按钮变为“停止服务”。

点击新增按钮弹出内容,服务名、服务IP、服务端口都是必填项,服务类型是必选项。输入无误后点击确定即可。该功能是将服务信息提前预置。

2、实现原理

2.1数据结构

服务管理表,用于存储服务信息,比对服务状态,结构如下:

服务角色对应表:

角色信息表:

2.2逻辑概述

服务状态及信息获取逻辑:服务管理应用访问网关,网关请求注册中心后获取已注册服务列表,返回给WEB应用,如图1所示。

在服务列表中选择需要“启动”或者“关停”的服务,执行“启动”或“关停”动作后,远程调用shell脚本,将对应的服务启动或停止。发起命令后,再下一次自动扫描轮询之前,服务状态会保持在“启动中”或“停止中”,执行动作后,重新查询注册中心,并返回注册服务信息,如图所示。

2.3关键逻辑处理

2.3.1服务查询

2.3.1.1服务查询页面及后台类路径

服务管理应用:

JSP:

/jsp/serviceStatement/serviceStatement.jsp

controller:

src/java/com/genersoft/serviceStatement/controller/ServiceStatementCont roller.java

service:

接口:

src/java/com/genersoft/serviceStatement/service/IServiceStatementServic

e.java

实现类:

src/java/com/genersoft/serviceStatement/service/impl/erviceStatementSer

viceImpl.java

mapper:

src/java/com/genersoft/serviceStatement/mapper/ServiceStatementMapper.x

ml

src/java/com/genersoft/serviceStatement/mapper/ServiceStatementMapper.java微服务框架:

integrain-sm-gateway:

/src/main/java/org/integrain/sm/gateway/serviceStatement/

controller/ServiceStatementController.java

2.3.1.2查询逻辑实现

2.3.1.2.1查询配置服务

JSP页面初始化或触发查询动作后,调用ServiceStatementController类中的queryStatement方法,该方法@RequestMapping为“/queryStatement”。

queryStatement调用IServiceStatementService中的queryStatement方法。

IServiceStatementService中的queryStatement方法通过调用ServiceStatementMapper中的queryStatement方法查询PUB_SERVICE_STATEMENT表,区分默认查询或带参数查询,默认查询不传递参数。

返回的查询结果暂存至ServiceStatementServiceImpl类中实例化的serviceBean中。

2.3.1.2.2查询注册中心已注册服务

在执行完(1)后ServiceStatementController通过HttpClient调用integrain-sm-gateway工程中ServiceStatementController类的findEurekaApps方法,该方法通过feign远程调用注册中心的Rest接口“/eureka/apps”。获取所有在注册中心上注册的服务信息。接口返回JSON格式数据。

以serviceBean数据为基础,结合注册中心的已注册服务信息,可得知PUB_SERVICE_STATEMENT表中配置服务的启动状态。数据处理完毕后,返回给前台界面展示。页面中的“操作”按钮,根据服务状态动态改变。

特殊情况控制:调用网关失败,无法获取注册中心的服务注册信息。因此调用网关失败时,需要特殊标记网关调用失败导致其他服务状态不可知。

2.3.1.2.3定时轮询服务状态

除了主动发出查询请求外,功能中自带定时轮询动作,实时调取注册中心“/eureka/apps”接口获取服务状态信息,核心代码如下:

self.setInterval(“queryServer(…)”,5000)

2.3.2服务启停

服务启停功能,依靠shell脚本实现。为所有在PUB_SERVICE_STATEMENT表中配置的服务创建shell脚本,将脚本放置在Linux服务器中的“bin/sh”下。Shell脚本参考配置如下停止服务:

#!/bin/bash

HOME='/usr/integrain'

port=8766

cd$HOME

PID=`ps-ef|grep integrain-sm-gateway-1.0.0-0702.jar|grep-v grep|awk'{print$2}'`

echo"K is:"$PID

echo"dfhadfiadfis="$PID

kill$PID

说明:

其中,HOME代表项目jar包的路径,cd$HOME代表查看当前文件夹下的文件。PID=`ps-ef|grep integrain-sm-gateway-1.0.0-0702.jar|grep-v grep|awk'{print$2}'`代表根据jar包名称,获取当前服务的进程ID。kill$PID代表杀死此进程,服务停止。

启动服务:

echo"启动服务开始**"

HOME='/usr/integrain'

JAR_HOME=integrain-sm-gateway-1.0.0-0702.jar

cd$HOME

nohup java-jar integrain-sm-gateway-1.0.0-0702.jar>out.log 2>&1&

sleep 1s

echo"系统自动启动中5..."

sleep 1s

echo"系统自动启动中4..."

sleep 1s

echo"系统自动启动中3..."

sleep 1s

echo"系统自动启动中2..."

sleep 1s

echo"系统自动启动中1..."

echo“启动完成========================================》”

说明:

其中,HOME代表项目jar包的路径,cd$HOME代表查看当前文件夹下的文件。nohup java-jar integrain-sm-gateway-1.0.0-0702.jar>out.log 2>&1&代表启动名称为integrain-sm-gateway-1.0.0-0702.jar的jar包,并经日志输出到out.log中。

2.3.2.1脚本路径配置

点击新增或编辑按钮,弹出弹框,对shell脚本路径进行配置,每一个服务对应一个启动脚本路径和一个停止脚本路径,用于服务的启动和停止。

脚本路径命名规则如下:/usr/bin/shell/xxxx.sh。其中,/usr/bin/shell/代表Linux服务器上的放置shell脚本的路径,xxxx.sh代表shell脚本的名称。

2.3.2.2脚本调用流程

首先配置Linux服务器的IP地址、用户名和密码。

其次,点击启动服务按钮或停止服务按钮,根据所填写的IP地址、用户名和密码登录Linux服务器。若登录成功,系统会根据你所配置的脚本路径,对Linux服务器上的shell脚本进行调用,执行shell脚本里的内容。

最后,根据shell脚本是否执行成功,服务启停页面会显示已启动、已停止或者启动失败、停止失败等状态。

在ServiceStatementController中定义方法“ShellExecutor”作为shell脚本的执行方法。

根据页面上列表中的服务信息,在执行脚本时,将这些信息传递给ShellExecutor方法,动态执行不同服务的脚本。

执行脚本前,记录服务状态。执行脚本后,重新获取注册中心中的已注册服务信息,如果服务停止后,在注册中心仍旧能够看到信息,则等待下一次轮询再次执行查询动作,期间页面处于等待效果,如果仍未变化,则提示“停止服务失败”,如果已经停止,则提示“停止服务成功”,此时结束等待效果。如果启动服务后,查看注册信息,未发现服务被启动,则提示“服务启动失败”。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值