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

2019-08-16 12:40:47来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

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

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


原文链接:https://www.cnblogs.com/shexunyu/p/11364119.html
如有疑问请与原作者联系

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:java io流

下一篇:Spring入门(九):运行时值注入