背景介紹 (Background Introduction)

  1. 目前有一些报表客户抱怨打不开
  2. 报表执行过程过长,5、8、10秒甚至更多
  3. 不能及时发现和掌握服务器web站点情况

用戶需求(User Requirements)

  1. 监控web站点执行情况
  2. 使用跟用户相同的谷歌浏览器进行模拟后台解析
  3. 获得web站点初始化时间单位秒
  4. 提供接口给运维人员做监控实时掌握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();
webstatusInEntity.setUrl("http://10.134.226.153: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);

 

数据结果集

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接口的更多相关文章

  1. 修改rabbitmq Web UI 监控页面的端口

    在前几天工作中遇到一个问题,部署服务器,需要用rabbitmq自带的一个web UI监控组件,但是15672的端口没有对外映射.尝试了几种办法.开始修改rabbitmq.config,rabbitmq ...

  2. .Net调用Java端带有WS-Security支持的Web Service各方案实战【转】

    原文:http://www.xuebuyuan.com/641669.html 到现在为止,我们AEP平台已经发布很长一段时间了,也有很多ISV接入并上线了,就语言而言,目前主要有三类:Java..N ...

  3. Java与WCF交互(二):WCF客户端调用Java web service【转】

    原文:http://www.cnblogs.com/downmoon/archive/2010/08/25/1807982.html 在上篇< Java与WCF交互(一):Java客户端调用WC ...

  4. 转载——Java与WCF交互(二):WCF客户端调用Java Web Service

    在上篇< Java与WCF交互(一):Java客户端调用WCF服务>中,我介绍了自己如何使用axis2生成java客户端的悲惨经历.有同学问起使用什么协议,经初步验证,发现只有wsHttp ...

  5. 使用Java编写一个简单的Web的监控系统cpu利用率,cpu温度,总内存大小

    原文:http://www.jb51.net/article/75002.htm 这篇文章主要介绍了使用Java编写一个简单的Web的监控系统的例子,并且将重要信息转为XML通过网页前端显示,非常之实 ...

  6. JsBridge实现Javascript和Java的互相调用

    前端网页Javascript和Native互相调用在手机应用中越来越常见,JsBridge是最常用的解决方案. 在Android开发中,能实现Javascript与Native代码通信的,有4种途径: ...

  7. php调用java

    PHP调用JAVA方式 1.     背景 在开发招商银行信用卡分期付款功能过程中,在支付成功之后需要对银行的返回数据进行签名验证,因签名加密方式招商银行是不提供的,只提供了相应的JAVA验证类测试例 ...

  8. Java 常用远程调用协议比较

    一.综述本文比较了RMI,Hessian,Burlap,Httpinvoker,web service等5种通讯协议的在不同的数据结构和不同数据量时的传输性能.RMI是java语言本身提供的远程通讯协 ...

  9. 在网页程序或Java程序中调用接口实现短信猫收发短信的解决方案

    方案特点: 在网页程序或Java程序中调用接口实现短信猫收发短信的解决方案,简化软件开发流程,减少各应用系统相同模块的重复开发工作,提高系统稳定性和可靠性. 基于HTTP协议的开发接口 使用特点在网页 ...

随机推荐

  1. atom Editor文本自动选择问题

    问题:如图中,我光标最初在42行,向上滑动鼠标,会自动选中42到所滑动行之间的文本 ,一般编辑器 都是要按shift 然后滑动鼠标 才有这个效果 解决方法: 是由于atom安装了atom-termin ...

  2. 两种dp模型

    两个常见模型 bzoj 4321 题意:编号为1~n的人排成一排,问有多少种排法使得任意相邻两人的编号之差不为1或-1. n<=1000 排列计数问题:考虑把数从小到大插入的过程进行dp. 设 ...

  3. HTTP缓存机制和原理

    前言 Http 缓存机制作为 web 性能优化的重要手段,对于从事 Web 开发的同学们来说,应该是知识体系库中的一个基础环节,同时对于有志成为前端架构师的同学来说是必备的知识技能.但是对于很多前端同 ...

  4. java实现二维码的生成与解析

    简单介绍下二维码:二维码其实就是一种编码技术,只是这种编码技术是用在图片上了,将给定的一些文字,数字转换为一张经过特定编码的图片,而解析二维码则相反,就是将一张经过编码的图片解析为数字或者文字. 当然 ...

  5. python排序之冒泡排序

    def sort(list): for i in range(len(list)): for j in range(len(list) - i - 1): if list[j] < list[j ...

  6. Linux: Block Port With IPtables

    由Internet和其他网络协议识别端口号,使计算机能够与其他人进行交互.每个Linux服务器都有一个端口号(参见/ etc / services文件) Block Incoming Port The ...

  7. Python 寻找文件夹里以特定格式结尾的文件

    代码: import os, re, time name = 'linuxday01' flags = True# 文件夹bi_test中的文件列表 print os.listdir('E:\\bi_ ...

  8. kotlin之包

    在kotlin中包的概念在表达方式上与Java完全一样,不过kotlin中的包和目录没有关系,kotlin包仅仅是为了引用文件中的资源而设计的. package loaderman.bar fun p ...

  9. ZeroMQ——一个轻量级的消息通信组件 C#

    ZeroMQ——一个轻量级的消息通信组件 ZeroMQ是一个轻量级的消息通信组件,尽管名字中包含了"MQ",严格上来讲ZeroMQ并不是"消息队列/消息中间件" ...

  10. goroutine 调度算法

    自从开始使用 Go 语言,到现在也有一年多了,虽不算精通,但也算小有理解.在这里简单记录一下我的心得(其实是学习别人的心得) goroutine,Go 语言中 cpu 运行的最小单元,与 lua 携程 ...