zoukankan      html  css  js  c++  java
  • 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调用实例

  • 相关阅读:
    路由
    客户端如何调用
    第一个简单的DEMO
    Web API初印象
    项目开发中经常使用的缓存
    EF的Model First
    如何计算代码的运行性能
    使用Obsolete特性来标记方法过时或弃用
    nodeJs实现文件上传,下载,删除
    node 部署教程二
  • 原文地址:https://www.cnblogs.com/shexunyu/p/11364119.html
Copyright © 2011-2022 走看看