Web循环监控Java调用 / Java调用.net wcf接口
背景介紹 (background introduction)
- 目前有一些报表客户抱怨打不开
- 报表执行过程过长,5、8、10秒甚至更多
- 不能及时发现和掌握服务器web站点情况
用戶需求(user requirements)
- 监控web站点执行情况
- 使用跟用户相同的谷歌浏览器进行模拟后台解析
- 获得web站点初始化时间单位秒
- 提供接口给运维人员做监控实时掌握web站点情况
詳細設計(design details)
1. simple设计
(1) tipdetail 数据消息
字段(field) |
字段说明(description) |
备注所有: |
success |
是否成功(调用是否成功) |
webstatusinentity
|
message |
调用消息(错误或提醒) |
|
t data |
泛型对象(描述相关功能信息) |
(2) webstatusinentity站点输入参数实体
字段(field) |
字段说明(description) |
备注所有: |
url |
加载的url |
|
filterips |
过滤ips,多个逗号隔开 |
|
filterports |
多个逗号隔开 |
|
maxloadscends |
最大加载时间 |
|
minrequstlen |
最小请求数 |
|
(3) webstatusoutentity web解析结果输出对象
字段(field) |
字段说明(description) |
备注所有: |
id |
id(服务端执行的唯一id) |
|
isfinish |
是否结束 |
|
issuccess |
是否成功(是否执行成功) |
|
loadscends |
加载秒数(在maxloadscends时间内) |
|
2. 功能接口
description |
方法 |
描述 |
参数(替换模板内数据) |
返回结果 |
逻辑说明 |
http://127.0.0.1:8734/netanalyzerservice?wsdl |
post |
wcf接口地址 |
|
|
|
runwebstatusjson
|
|
运行状态分析 |
webstatusinentity webstatusinentity = new webstatusinentity(); |
|
数据结果集 |
getwebstatusjson
|
|
获取webstatus分析详情 |
id |
|
|
1. 相关类:
(1) package simple;
import com.google.gson.gson;
import com.google.gson.reflect.typetoken;
import org.apache.cxf.endpoint.client;
import org.apache.cxf.jaxws.endpoint.dynamic.jaxwsdynamicclientfactory;
import java.util.arraylist;
import java.util.list;
/**
* created by xun-yu.she on 2019/8/15
*/
public class webstatustest {
/*
程序主入口
*/
public static void main(string[]
args) throws exception {
try {
string resultjson = runwebstatusjsonjob(100);
system.out.println("*******"
+ resultjson);
} catch (exception ex)
{
system.out.println("*******"
+ ex.getmessage());
}
}
/*
java调用动态调用wcf接口
执行web查看状态,由于第一二次执行涉及到初始化等,所以难免获取的时间会长一些,
所以平均的打开速度竟可能以第3~4次的分析,所以这里我设置的是一个执行的job,根据情况执行
*/
public static string
runwebstatusjsonjob(int runcount) throws exception {
try {
//初始服务
jaxwsdynamicclientfactory
dcflient = jaxwsdynamicclientfactory.newinstance();
//创建服务
client client =
dcflient.createclient("http://10.60.136.172:8734/netanalyzerservice?wsdl");
//初始化序列化对象
gson gson = new gson();
object[] objects;
//结果集
list<webstatusoutentity>
webstatusoutentitys = new arraylist<webstatusoutentity>();
//参数对象
webstatusinentity
webstatusinentity = new webstatusinentity();
webstatusinentity.seturl("http://127.0.0.1:81/reports/powerbi/oee_bu?rs:embed=true&rs:token=1"); //要执行的web
webstatusinentity.setfilterips("10.134.226.153"); //通过谷歌可以监控到url需要访问的原始ip,如果有多个可以逗号隔开
webstatusinentity.setmaxloadscends(20); //服务端监控一直执行所等待时间,
webstatusinentity.setminrequstlen(100); //执行一次url执行大概最小请求数,可以通过谷歌浏览器的network监控到,如果服务端执行的请求数大于最小请求数,就会默认web执行成功
//循环多次执行
for (int i = 0; i <
runcount; i++) {
try {
objects =
client.invoke("runwebstatusjson", webstatusinentity.geturl(),
webstatusinentity.getfilterips(), null,
webstatusinentity.getmaxloadscends(), webstatusinentity.getminrequstlen());
//泛型序列化
tipdetail<webstatusoutentity>
resultdetail = gson.fromjson(objects[0].tostring(), new typetoken<tipdetail<webstatusoutentity>>()
{
}.gettype());
//线程等待,这等待的时间是服务器端需要根据用户设定的maxloadscends的值去监控等待一段时间,所以调用端一般需要在此基础上多增加15+秒,在调用查询接口了解执行情况,服务端同一时间只处理一次请求,不能被多个客户端同时调用
thread.currentthread().sleep(webstatusinentity.getmaxloadscends()
* 1000 + 10000);//毫秒
if (resultdetail.getsuccess()
&& resultdetail.getdata() != null) {
objects =
client.invoke("getwebstatusjson",
resultdetail.getdata().getid());
//泛型序列化
resultdetail =
gson.fromjson(objects[0].tostring(), new typetoken<tipdetail<webstatusoutentity>>()
{
}.gettype());
webstatusoutentitys.add(resultdetail.data);
}
} catch (exception ex)
{
}
}
string strwebstatusoutentitys
= gson.tojson(webstatusoutentitys);
return strwebstatusoutentitys;
} catch (exception ex)
{
// statuscode=500 //wcf挂了
system.out.println("*******"
+ ex.getmessage());
throw ex;
}
}
}
(2)
package simple;
import lombok.allargsconstructor;
import lombok.data;
import lombok.noargsconstructor;
import java.util.list;
/**
* created by xun-yu.she on 2019/8/14
* 数据消息对象
*/
@data
@allargsconstructor
@noargsconstructor
public class tipdetail<t> {
/// <summary>
/// 是否成功(调用是否成功)
///
</summary>
public boolean success;
/// <summary>
/// 调用消息(错误或提醒)
/// </summary>
public string message;
/// <summary>
/// 泛型对象(描述相关功能信息)
///
</summary>
public t data;
//public list<t> datas ;
}
(3)
package simple;
import lombok.data;
/**
* created by xun-yu.she on 2019/8/15
* 站点输入参数实体
*/
@data
public class webstatusinentity {
/// <summary>
/// 加载的url
/// </summary>
public string url;
/// <summary>
/// 过滤ips,多个逗号隔开
///
</summary>
public string filterips;
/// <summary>
/// 过滤ports,多个逗号隔开
/// </summary>
public string filterports;
/// <summary>
/// 最大加载时间
///
</summary>
public int maxloadscends;
/// <summary>
/// 最小请求数
///
</summary>
public int minrequstlen;
}
(4)
package simple;
import lombok.data;
/**
* created by xun-yu.she on 2019/8/15
* web解析结果输出对象
*/
@data
public class webstatusoutentity {
/// <summary>
/// id(服务端执行的唯一id)
///
</summary>
public string id ;
/// <summary>
/// 是否结束
///
</summary>
public boolean isfinish ;
/// <summary>
/// 是否成功(是否执行成功)
///
</summary>
public boolean issuccess ;
/// <summary>
/// 加载秒数
///
</summary>
public int loadscends ;
}
前提條件(design constants)
1. 导入需要的包
<dependencies>
<dependency>
<groupid>org.apache.httpcomponents</groupid>
<artifactid>httpclient</artifactid>
<version>4.5.4</version>
</dependency>
<dependency>
<groupid>com.alibaba</groupid>
<artifactid>fastjson</artifactid>
<version>1.1.41</version>
</dependency>
<dependency>
<groupid>org.apache.cxf</groupid>
<artifactid>cxf-spring-boot-starter-jaxws</artifactid>
<version>3.1.11</version>
</dependency>
<dependency>
<groupid>org.scala-lang</groupid>
<artifactid>scala-library</artifactid>
<version>2.11.0</version>
</dependency>
<dependency>
<groupid>com.google.code.gson</groupid>
<artifactid>gson</artifactid>
<version>2.8.5</version>
</dependency>
<dependency>
<groupid>org.projectlombok</groupid>
<artifactid>lombok</artifactid>
<version>1.16.22</version>
</dependency>
</dependencies>
最終用戶特征(user characteristics)
总结:此为java调用.net wcf调用实例