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调用实例
相关文章