当前位置: 移动技术网 > IT编程>开发语言>Java > Web循环监控Java调用 / Java调用.net wcf接口

Web循环监控Java调用 / Java调用.net wcf接口

2019年08月16日  | 移动技术网IT编程  | 我要评论

背景介紹 (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调用实例

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网