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调用实例
Web循环监控Java调用 / Java调用.net wcf接口的更多相关文章
- 修改rabbitmq Web UI 监控页面的端口
在前几天工作中遇到一个问题,部署服务器,需要用rabbitmq自带的一个web UI监控组件,但是15672的端口没有对外映射.尝试了几种办法.开始修改rabbitmq.config,rabbitmq ...
- .Net调用Java端带有WS-Security支持的Web Service各方案实战【转】
原文:http://www.xuebuyuan.com/641669.html 到现在为止,我们AEP平台已经发布很长一段时间了,也有很多ISV接入并上线了,就语言而言,目前主要有三类:Java..N ...
- Java与WCF交互(二):WCF客户端调用Java web service【转】
原文:http://www.cnblogs.com/downmoon/archive/2010/08/25/1807982.html 在上篇< Java与WCF交互(一):Java客户端调用WC ...
- 转载——Java与WCF交互(二):WCF客户端调用Java Web Service
在上篇< Java与WCF交互(一):Java客户端调用WCF服务>中,我介绍了自己如何使用axis2生成java客户端的悲惨经历.有同学问起使用什么协议,经初步验证,发现只有wsHttp ...
- 使用Java编写一个简单的Web的监控系统cpu利用率,cpu温度,总内存大小
原文:http://www.jb51.net/article/75002.htm 这篇文章主要介绍了使用Java编写一个简单的Web的监控系统的例子,并且将重要信息转为XML通过网页前端显示,非常之实 ...
- JsBridge实现Javascript和Java的互相调用
前端网页Javascript和Native互相调用在手机应用中越来越常见,JsBridge是最常用的解决方案. 在Android开发中,能实现Javascript与Native代码通信的,有4种途径: ...
- php调用java
PHP调用JAVA方式 1. 背景 在开发招商银行信用卡分期付款功能过程中,在支付成功之后需要对银行的返回数据进行签名验证,因签名加密方式招商银行是不提供的,只提供了相应的JAVA验证类测试例 ...
- Java 常用远程调用协议比较
一.综述本文比较了RMI,Hessian,Burlap,Httpinvoker,web service等5种通讯协议的在不同的数据结构和不同数据量时的传输性能.RMI是java语言本身提供的远程通讯协 ...
- 在网页程序或Java程序中调用接口实现短信猫收发短信的解决方案
方案特点: 在网页程序或Java程序中调用接口实现短信猫收发短信的解决方案,简化软件开发流程,减少各应用系统相同模块的重复开发工作,提高系统稳定性和可靠性. 基于HTTP协议的开发接口 使用特点在网页 ...
随机推荐
- HTTP第八、九章之网关、隧道、web机器人
网关 网关(gateway): 资源和应用程序之间的粘合剂.应用程序可以(通过HTTP或其它已定义的接口)请求网关来处理某条请求,网关可以提供一条响应.网关可以向数据库发送查询语句,或者生成动态的内容 ...
- MKAnnotation image offset with custom pin image
</pre><pre> Your UIAnnotationView is always drawn at the same scale, the map's zoom leve ...
- 【redis 学习系列】API的理解与使用(四)
5.集合 集合(set)类型也是用来保存多个字符串元素,但是与列表不一样的是,集合中不允许有重复的元素,并且集合中的元素是无序的,不能通过索引下标获取元素. 如图2-22所示,集合user:1:fol ...
- linux 下安装redis并用QT写客户端程序进行连接
1.安装redis.使用如下命令: wget http://dowload.redis.io/redis-stable.tar.gz tar xzf redis-stable.tar.gz cd ...
- shell远程操作另外一台机器上数据
shell远程操作另外一台机器上的数据,有两种方式: 1 .配置免密登陆,2.使用sshpass 当前存在两台虚拟机,ip地址分别为:192.168.3.32 192.168.3.33 一.免密登陆操 ...
- 微信一键登录(微信OAuth2.0)
1.注册微信开放平台https://open.weixin.qq.com,一定要清楚微信开放平台和微信公众平台是分别独立的,不能共用. 2.登录进入——管理中心,网站应用,创建网站应用.填写申请,企业 ...
- Linux(CentOS / RHEL 7) 防火墙
CentOS / RHEL 7 防火墙 Table of Contents 1. 简述 2. 常用基本操作 2.1. 查看防火墙状态 2.2. 开启防火墙 2.3. 关闭防火墙 2.4. 开机自动启动 ...
- Python - 二叉树, 堆, headq 模块
二叉树 概念 二叉树是n(n>=0)个结点的有限集合,该集合或者为空集(称为空二叉树), 或者由一个根结点和两棵互不相交的.分别称为根结点的左子树和右子树组成. 特点 每个结点最多有两颗子树,所 ...
- 小D课堂 - 新版本微服务springcloud+Docker教程_6-03 高级篇幅之zuul常用问题分析
笔记 3.高级篇幅之Zuul常用问题分析和网关过滤器原理分析 简介:讲解Zuul网关原理和过滤器生命周期, 1.路由名称定义问题 路由映射重复覆盖问题 ...
- ajax基础------备忘
1:register.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" ...