Эх сурвалжийг харах

Merge branch '2.2.0' of http://shvber.com/Git/VSDSM_SERVER into 2.2.0

YueYunyun 2 жил өмнө
parent
commit
cceac56723
11 өөрчлөгдсөн 221 нэмэгдсэн , 5 устгасан
  1. 5 0
      VB_DSM_V2.1/vbdsm-data-upload/vbdsm-hj212/vbdsm-hj212-modbus/pom.xml
  2. 7 2
      VB_DSM_V2.1/vbdsm-data-upload/vbdsm-hj212/vbdsm-hj212-modbus/src/main/java/cn/vbdsm/hj212/modbus/VbdsmHj212ModbusApplication.java
  3. 9 0
      VB_DSM_V2.1/vbdsm-data-upload/vbdsm-hj212/vbdsm-hj212-modbus/src/main/java/cn/vbdsm/hj212/modbus/config/TaskConfig.java
  4. 1 0
      VB_DSM_V2.1/vbdsm-data-upload/vbdsm-hj212/vbdsm-hj212-modbus/src/main/java/cn/vbdsm/hj212/modbus/config/TcpServerProperties.java
  5. 38 0
      VB_DSM_V2.1/vbdsm-data-upload/vbdsm-hj212/vbdsm-hj212-modbus/src/main/java/cn/vbdsm/hj212/modbus/handler/TcpClientHandler.java
  6. 63 0
      VB_DSM_V2.1/vbdsm-data-upload/vbdsm-hj212/vbdsm-hj212-modbus/src/main/java/cn/vbdsm/hj212/modbus/server/TcpSocketClient.java
  7. 16 1
      VB_DSM_V2.1/vbdsm-data-upload/vbdsm-hj212/vbdsm-hj212-modbus/src/main/java/cn/vbdsm/hj212/modbus/task/UploadDataTask.java
  8. 47 0
      VB_DSM_V2.1/vbdsm-data-upload/vbdsm-hj212/vbdsm-hj212-modbus/src/main/java/cn/vbdsm/hj212/modbus/utils/ExecUtil.java
  9. 30 1
      VB_DSM_V2.1/vbdsm-data-upload/vbdsm-hj212/vbdsm-hj212-modbus/src/main/java/cn/vbdsm/hj212/modbus/utils/WsClientUtil.java
  10. 4 0
      VB_DSM_V2.1/vbdsm-data-upload/vbdsm-hj212/vbdsm-hj212-modbus/src/main/java/cn/vbdsm/hj212/modbus/ws/MockUploadWsService.java
  11. 1 1
      VB_DSM_V2.1/vbdsm-data-upload/vbdsm-hj212/vbdsm-hj212-modbus/src/main/resources/application.yml

+ 5 - 0
VB_DSM_V2.1/vbdsm-data-upload/vbdsm-hj212/vbdsm-hj212-modbus/pom.xml

@@ -74,6 +74,11 @@
 <!--            <version>2.7.1</version>-->
 <!--            <scope>compile</scope>-->
 <!--        </dependency>-->
+        <dependency>
+            <groupId>com.alibaba.csp</groupId>
+            <artifactId>sentinel-core</artifactId>
+            <version>1.8.6</version>
+        </dependency>
     </dependencies>
 <!--    <dependencyManagement>-->
 <!--        <dependencies>-->

+ 7 - 2
VB_DSM_V2.1/vbdsm-data-upload/vbdsm-hj212/vbdsm-hj212-modbus/src/main/java/cn/vbdsm/hj212/modbus/VbdsmHj212ModbusApplication.java

@@ -26,8 +26,13 @@ public class VbdsmHj212ModbusApplication implements CommandLineRunner {
     }
 
     @Override
-    public void run(String... args) throws Exception {
-        uploadDataTask.startUpload();
+    public void run(String... args)  {
+        try{
+            uploadDataTask.startUpload();
+        }catch (Exception e){
+            log.error("uploadData error:" + e.getMessage());
+        }
+
       //uploadDataService.loadTerminals();
 //        tcpSocketServer.run();
 //        Runtime.getRuntime().addShutdownHook(new Thread(){

+ 9 - 0
VB_DSM_V2.1/vbdsm-data-upload/vbdsm-hj212/vbdsm-hj212-modbus/src/main/java/cn/vbdsm/hj212/modbus/config/TaskConfig.java

@@ -16,4 +16,13 @@ public class TaskConfig {
         executor.setAwaitTerminationSeconds(60);
         return executor;
     }
+    @Bean(name = "restartTaskScheduler")
+    public ThreadPoolTaskScheduler restartTaskScheduler(){
+        ThreadPoolTaskScheduler executor = new ThreadPoolTaskScheduler();
+        executor.setPoolSize(1);
+        executor.setThreadNamePrefix("taskRestartExecutor-");
+        executor.setWaitForTasksToCompleteOnShutdown(true);
+        executor.setAwaitTerminationSeconds(60);
+        return executor;
+    }
 }

+ 1 - 0
VB_DSM_V2.1/vbdsm-data-upload/vbdsm-hj212/vbdsm-hj212-modbus/src/main/java/cn/vbdsm/hj212/modbus/config/TcpServerProperties.java

@@ -18,6 +18,7 @@ public class TcpServerProperties {
     private Integer bossThreadNum = 1;
 
     private Integer workThreadNum = 4;
+
     public static TcpServerProperties defaultProperties() {
         TcpServerProperties properties = new TcpServerProperties();
         properties.bindPort = 18888;

+ 38 - 0
VB_DSM_V2.1/vbdsm-data-upload/vbdsm-hj212/vbdsm-hj212-modbus/src/main/java/cn/vbdsm/hj212/modbus/handler/TcpClientHandler.java

@@ -0,0 +1,38 @@
+package cn.vbdsm.hj212.modbus.handler;
+
+import io.netty.channel.ChannelDuplexHandler;
+import io.netty.channel.ChannelHandler;
+import io.netty.channel.ChannelHandlerAdapter;
+import io.netty.channel.ChannelHandlerContext;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+
+@Slf4j
+@ChannelHandler.Sharable
+@AllArgsConstructor
+public class TcpClientHandler extends ChannelDuplexHandler {
+
+    @Override
+    public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
+        System.out.println("通信异常!!");
+        cause.printStackTrace();
+    }
+
+    @Override
+    public void channelInactive(ChannelHandlerContext ctx) throws Exception {
+        super.channelInactive(ctx);
+    }
+
+    @Override
+    public void channelActive(ChannelHandlerContext ctx) throws Exception {
+        super.channelActive(ctx);
+    }
+    @Override
+    public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
+        log.info("接收数据包:{}", msg);
+    }
+
+    public void channelReadComplete(ChannelHandlerContext ctx) throws Exception {
+        ctx.channel().writeAndFlush("数据读取完成!");
+    }
+}

+ 63 - 0
VB_DSM_V2.1/vbdsm-data-upload/vbdsm-hj212/vbdsm-hj212-modbus/src/main/java/cn/vbdsm/hj212/modbus/server/TcpSocketClient.java

@@ -0,0 +1,63 @@
+package cn.vbdsm.hj212.modbus.server;
+
+import cn.vbdsm.hj212.modbus.handler.TcpClientHandler;
+import io.netty.bootstrap.Bootstrap;
+import io.netty.channel.*;
+import io.netty.channel.nio.NioEventLoopGroup;
+import io.netty.channel.socket.SocketChannel;
+import io.netty.channel.socket.nio.NioSocketChannel;
+import lombok.Getter;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+import java.net.InetSocketAddress;
+import java.util.Scanner;
+
+@Component
+@Slf4j
+public class TcpSocketClient {
+
+    @Getter
+    private Bootstrap bootstrap;
+    @Getter
+    private Channel channel;
+
+    @Value("${vbdsm.socket.client.port}")
+    private int port;
+    @Value("${vbdsm.socket.client.bindIp}")
+    private String host;
+
+    public void connect(){
+        EventLoopGroup group = new NioEventLoopGroup();
+        this.bootstrap = new Bootstrap();
+        bootstrap.group(group).channel(NioSocketChannel.class)
+                .option(ChannelOption.TCP_NODELAY, true)
+                .handler(new ChannelInitializer<SocketChannel>() {
+                    @Override
+                    protected void initChannel(SocketChannel ch) throws Exception {
+//                        ch.pipeline().addLast("decoder",new DealMsg()); //设置自定义解码器
+//                        ch.pipeline().addLast("encoder",new MsgEncode()); //设置自定义编码器
+                        ch.pipeline().addLast(new TcpClientHandler());//设置客户端网络IO处理器
+                    }
+                });
+        //连接服务器 同步等待成功
+        ChannelFuture f = bootstrap.connect(new InetSocketAddress(host, port));
+        //同步等待客户端通道关闭
+        try {
+            this.channel = f.sync().channel();
+        } catch (InterruptedException e) {
+            throw new RuntimeException(e);
+        }
+        //释放线程组资源
+        //group.shutdownGracefully();
+    }
+
+    public void sendMsg(String msg){
+        try {
+            this.channel.writeAndFlush(msg);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+}

+ 16 - 1
VB_DSM_V2.1/vbdsm-data-upload/vbdsm-hj212/vbdsm-hj212-modbus/src/main/java/cn/vbdsm/hj212/modbus/task/UploadDataTask.java

@@ -1,5 +1,6 @@
 package cn.vbdsm.hj212.modbus.task;
 
+import cn.vbdsm.hj212.modbus.utils.ExecUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.Scheduled;
@@ -35,9 +36,16 @@ public class UploadDataTask {
 //    }
     @Resource(name = "uploadDataTaskScheduler")
     private ThreadPoolTaskScheduler taskScheduler;
+    @Resource(name = "restartTaskScheduler")
+    private ThreadPoolTaskScheduler restartTaskScheduler;
 
     private ScheduledFuture future;
 
+   // private ScheduledFuture restartFuture;
+
+
+
+
     public void startUpload(){
         //每次调用前,可执行一次关闭之前的
         stopUpload();
@@ -47,7 +55,11 @@ public class UploadDataTask {
             }catch (Exception e){
                 log.error("uploadData error:" + e.getMessage());
             }
-        },new CronTrigger("0/2 * * * * ?"));
+        },new CronTrigger("0 0/15 * * * ?"));
+
+//        restartFuture = restartTaskScheduler.schedule(()->{
+//            ExecUtil.execCommand("/opt/vbdsm/exec_mock.sh restart vbdsm-hj212-modbus-2.1.0");
+//        },new CronTrigger("0 5/15 * * * ?"));
     }
 
     public void stopUpload(){
@@ -56,4 +68,7 @@ public class UploadDataTask {
             future.cancel(true);
         }
     }
+
+
+
 }

+ 47 - 0
VB_DSM_V2.1/vbdsm-data-upload/vbdsm-hj212/vbdsm-hj212-modbus/src/main/java/cn/vbdsm/hj212/modbus/utils/ExecUtil.java

@@ -0,0 +1,47 @@
+package cn.vbdsm.hj212.modbus.utils;
+
+import lombok.extern.slf4j.Slf4j;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+
+@Slf4j
+public class ExecUtil {
+
+    public static void execCommand(String command){
+        log.info("begin exec os command: " + command);
+        Process process;
+        try {
+            process = Runtime.getRuntime().exec(command);
+            //开启新线程处理正常输出 和 错误输出
+            newThreadLogInputStream(process.getInputStream());
+            newThreadLogInputStream(process.getErrorStream());
+            // 阻塞当前进程,直到命令结束
+            process.waitFor();
+            // 不会阻塞进程,但是调用时如果没有完成会报错
+            if (process.exitValue() != 0) {
+                log.error("exec os command failure: " + command);
+            } else {
+                log.info("exec os command success: " + command);
+            }
+        } catch (Exception  e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    private static void newThreadLogInputStream(InputStream is) {
+        new Thread(()->{
+            try {
+                BufferedReader reader = new BufferedReader(new InputStreamReader(is));
+                String line = null;
+                while ((line = reader.readLine()) != null) {
+                    log.info(line);
+                }
+            } catch (IOException e) {
+                log.error("newThreadLogInputStream error:{}",e.getMessage());
+            }
+        }).start();
+    }
+}

+ 30 - 1
VB_DSM_V2.1/vbdsm-data-upload/vbdsm-hj212/vbdsm-hj212-modbus/src/main/java/cn/vbdsm/hj212/modbus/utils/WsClientUtil.java

@@ -1,10 +1,14 @@
 package cn.vbdsm.hj212.modbus.utils;
+
 import lombok.extern.slf4j.Slf4j;
 import org.apache.cxf.endpoint.Client;
 import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;
 import org.apache.cxf.transport.http.HTTPConduit;
 import org.apache.cxf.transports.http.configuration.HTTPClientPolicy;
 
+import java.util.ArrayList;
+import java.util.List;
+
 @Slf4j
 public class WsClientUtil {
     public static String callWebSV(String wsdUrl, String operationName, String... params){
@@ -12,7 +16,7 @@ public class WsClientUtil {
         Client client = dcf.createClient(wsdUrl);
         HTTPConduit conduit = (HTTPConduit) client.getConduit();
         HTTPClientPolicy policy = new HTTPClientPolicy();
-        long timeout =  10 * 1000;// 60s timeout
+        long timeout =  10 * 1000;// 10s timeout
         policy.setConnectionTimeout(timeout);
         policy.setReceiveTimeout(timeout);
         conduit.setClient(policy);
@@ -27,4 +31,29 @@ public class WsClientUtil {
         return "发送错误!请检查日志记录!";
     }
 
+
+//    public static void main(String[] args){
+//        initFlowRules();
+//        while (true) {
+//            // 1.5.0 版本开始可以直接利用 try-with-resources 特性
+//            try (Entry entry = SphU.entry("HelloWorld")) {
+//                // 被保护的逻辑
+//                System.out.println("hello world");
+//            } catch (BlockException ex) {
+//                // 处理被流控的逻辑
+//                System.out.println("blocked!");
+//            }
+//        }
+//    }
+//
+//    public static void initFlowRules(){
+//        List<FlowRule> rules = new ArrayList<>();
+//        FlowRule rule = new FlowRule();
+//        rule.setResource("HelloWorld");
+//        rule.setGrade(RuleConstant.FLOW_GRADE_QPS);
+//        rule.setCount(20);
+//        rules.add(rule);
+//        FlowRuleManager.loadRules(rules);
+//    }
+
 }

+ 4 - 0
VB_DSM_V2.1/vbdsm-data-upload/vbdsm-hj212/vbdsm-hj212-modbus/src/main/java/cn/vbdsm/hj212/modbus/ws/MockUploadWsService.java

@@ -11,6 +11,7 @@ import cn.vbdsm.hj212.modbus.ws.data.RandomHarmonic;
 import cn.vbdsm.hj212.modbus.ws.data.RandomPower;
 import cn.vbdsm.hj212.modbus.ws.data.TerminalData;
 
+import com.alibaba.csp.sentinel.annotation.SentinelResource;
 import com.alibaba.fastjson2.JSON;
 import lombok.extern.slf4j.Slf4j;
 import lombok.var;
@@ -55,6 +56,7 @@ public class MockUploadWsService {
 //            }
 //        }
 //    }
+    @SentinelResource("uploadBlockHandler")
     public void loadTerminals(){
         String terminals = mockMonitor.getTerminals();
         String[] coms = terminals.split("&");
@@ -75,6 +77,8 @@ public class MockUploadWsService {
         }
     }
 
+
+
     private TerminalData getTerminal(String companyId,String terminalId){
         String filePath = StrUtil.format("./mock/{}@{}.json",companyId,terminalId);
         //Resource fileResource =resourceLoader.getResource(filePath);

+ 1 - 1
VB_DSM_V2.1/vbdsm-data-upload/vbdsm-hj212/vbdsm-hj212-modbus/src/main/resources/application.yml

@@ -10,7 +10,7 @@ vbdsm:
             workThreadNum: 4 #netty work线程数,默认为4
     ws:
         #url: http://192.168.0.104:7100/services/UploadData?wsdl;http://192.168.0.104:7100/services/UploadData?wsdl
-        url: http://127.0.0.1:7100/services/UploadData?wsdl
+        url: http://192.168.0.81:7101/services/UploadData?wsdl
         method: UploadAllData
         key: WOSHI123456MIYAO
     monitor: