Client 客户端AspNetCore.SignalR 通讯服务器 Quartz 执行任务
背景
需要Client跑服务在终端间隔执行任务,我的目标是运行在树莓派上
Client代码
如果未连接成功时隔3秒重新连接服务器
public static void Reconnect()
{
var isLink = false;
do
{
Thread.Sleep(3000);//3秒
isLink = Signalr().GetAwaiter().GetResult();
} while (!isLink);
}
通过命令开启 Quartz 调度器
public static async Task<bool> Signalr()
{
System.Diagnostics.Stopwatch stopwatch = new System.Diagnostics.Stopwatch();
stopwatch.Start(); // 开始监视代码运行时间
var urlstr = "https://localhost:44363//hubs";
var url = new Uri(urlstr);
var connection = new HubConnectionBuilder()
.WithUrl(url)
.Build();
hubConnection = connection;
connection.On<int, string>("SendCmd", (cmd, data) =>
{
switch (cmd)
{
case 10001:
if (scheduler == null)
{
InJobAsync().Wait();
}
else
{
if (scheduler.IsStarted != true)
{
InJobAsync().Wait();
}
else
{ connection.SendAsync("ClientMsg", "正在运行");
}
} break;
case 10010:
var send = 10;
Int32.TryParse(data, out send);
if (scheduler != null)
scheduler.Clear();
InJobAsync(send).GetAwaiter().GetResult();
break;
default:
connection.SendAsync("ClientMsg", "未知命令");
break;
}
});
connection.Closed += e =>
{
if (e != null)
{
Console.WriteLine("Connection closed..." + e.Message);
}
else
{
Console.WriteLine("开始重连..." + e.Message); }
Reconnect();
return Task.CompletedTask;
};
try
{
Console.WriteLine($"开始连接服务器[{urlstr}]");
await connection.StartAsync();
stopwatch.Stop(); // 停止监视
TimeSpan timespan = stopwatch.Elapsed; // 获取当前实例测量得出的总时间
double seconds = timespan.TotalSeconds; // 总秒数
Console.WriteLine($"耗时:{seconds} 服务器[{urlstr}]连接成功!");
return true;
}
catch (Exception err)
{
stopwatch.Stop(); // 停止监视
TimeSpan timespan = stopwatch.Elapsed; // 获取当前实例测量得出的总时间
double seconds = timespan.TotalSeconds; // 总秒数
var meg = $"执行时间:{seconds} 连接失败:{err.Message}";
Console.WriteLine(meg);
return false;
}
}
public static StdSchedulerFactory factory = null;
public static IScheduler scheduler = null;
public static async Task InJobAsync(int iInterval = 10)
{ if (factory == null)
{
factory = new StdSchedulerFactory();
}
if (scheduler == null)
{
scheduler = await factory.GetScheduler();
} // 启动任务调度器
await scheduler.Start(); IJobDetail job = JobBuilder.Create<FlowerJob>()
.WithIdentity("job1", "group1")
.WithDescription("定时数据传送")
.Build();
ISimpleTrigger trigger = (ISimpleTrigger)TriggerBuilder.Create()
.WithIdentity("trigger1") // 给任务一个名字
//.StartAt(myStartTime) // 设置任务开始时间
.ForJob("job1", "group1") //给任务指定一个分组
.WithSimpleSchedule(x => x
.WithIntervalInSeconds(iInterval) //循环的时间
.RepeatForever())
.Build(); // 开启任务调度器
await scheduler.ScheduleJob(job, trigger); }
Jobs任务
public class FlowerJob : IJob
{
public Task Execute(IJobExecutionContext context)
{
//Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}执行任务:"+context.JobDetail.Description); //逻辑代码 return Task.CompletedTask;
}
}
Client 客户端AspNetCore.SignalR 通讯服务器 Quartz 执行任务的更多相关文章
- WebSocket Client连接AspNetCore SignalR Json Hub
突然有个需求,需要使用普通的websocket客户端去连接SignalR服务器. 因为使用的是.net core 版的signalr,目前对于使用非signalr客户端连接的中文文档几乎为0,在gay ...
- 微信小程序与AspNetCore SignalR聊天实例
微信小程序与aspnetcore signalr实例 本文不对小程序与signalr做任何介绍,默认读者已经掌握 aspnetcore Signalr文档 小程序文档 写在之前 SignalR没有提供 ...
- Asp.NetCore+Microsoft.AspNetCore.SignalR前后端分离
1.新建WebApi 2.安装Microsoft.AspNetCore.SignalR 3.新建一个集线器和消息类 using Microsoft.AspNetCore.SignalR; using ...
- Oracle client客户端简易安装网上文档一
Oracle client客户端简易安装网上文档一-------------------------------------------------------------------------一. ...
- Tomcat配置错误导致Quartz执行两次问题
以下基于tomcat服务器 我们通常将域名映射到指定服务器的端口上,以通过域名直接访问服务,如http://www.abc.com域名已绑定到本机的80端口,项目名wechat,则直接访问http:/ ...
- Android手机SSH Client客户端推荐JuiceSSH
Windows上建立ssh服务器 参见: http://www.cnblogs.com/xred/archive/2012/04/21/2461627.html Android手机SSH Client ...
- ABP 找不到版本为 (>= 1.0.0-preview1-27891) 的包 Microsoft.AspNetCore.SignalR 错误
错误描述: 下载ABP模板项目3.4.1的版本(当前最新版本),编译加载nuget包Microsoft.AspNetCore.SignalR时会报如下错误: 严重性 代码 说明 ...
- 关于mysql安装后在客户端cmd插入语句无法执行的问题
关于mysql安装后在客户端cmd插入语句无法执行的问题 因为windows cmd默认字符集是gbk,当character_set_client=utf8时,cmd中出现中文会报错:characte ...
- 同一台电脑中同时安装oracle database 服务器端和oracle client 客户端时注意
如果在一台电脑中同时安装oracle的客户端和服务器端软件, 一定要先安装oracle database 服务端,并进行相应的配置 listener.ORA. 然后再去安装oracle client ...
随机推荐
- python 环境配置的导入与导出
Python——配置环境的导出与导入 导出Python环境安装包[root@bogon ~]# pip freeze > packages.txt这将会创建一个 packages.txt文件 ...
- HDFS常用API操作 和 HDFS的I/O流操作
前置操作 创建maven工程,修改pom.xml文件: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xs ...
- v8/src/compilation-statistics.cc pdfium编译
v8/src/compilation-statistics.cc:18:3: 警告:‘auto’ changes meaning in C++11; please remove it [-Wc++0x ...
- Python玩转微信小程序
用Python玩转微信 Python玩转微信 大家每天都在用微信,有没有想过用python来控制我们的微信,不多说,直接上干货! 这个是在 itchat上做的封装 http://itchat. ...
- NAT网络地址转换的原理--笔试答题版
最早接触NAT是在做网络工程师的时候,NAT是做网络工程师必需会的知识点和技能,后来在面试运维的时候也经常被用到,在运维的某些知识点当中也会被引用到,如LVS当中. 为什么需要NAT(网络地址转换)? ...
- android主流开源自动化框架(monkeyrunner,robotium,uiautomator)转载
摘要: android自动化框架小结:monkey,monkeyrunner,cts,robotium,uiautomator android自动化框架: Uiautomator: 优点:可以对所有操 ...
- shell 之while两种写法
1.while[] #!/bin/dash min= max= while [ $min -le $max ] do echo $min min=`` done 2. while(()) #!/bin ...
- day31_8.12并发编程二线程
一.进程间的通信 在进程中,可以通过Queue队列进行通信,队列有两个特点: 1.先进先出.(先来的数据先被取出) 2.管道式存取.(数据取出一次后就不会在有了) 在python中有以下方法来操作数据 ...
- 洛谷 U87052 一线天
洛谷 U87052 一线天 题目传送门 题目背景 \(JDFZ\)即将举办第一届"一线天"趣味运动会...... 题目描述 "一线天"运动会在\(JLU\)南岭 ...
- GreenPlum 大数据平台--增加segment
01,增加机器的配置 需要增加的机器安装greenplum 软件(操作见greenplum安装部署章节) 02,分配机器存储区域 03,配置互信 使用gpssh-exkeys确保Segment主机能通 ...