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 ...
随机推荐
- vue---v-model的详细解答
1.v-model:双向数据绑定的实现原理 等同于一个 v-bind 加 v-on <div id="app"> <!-- <input t ...
- bootstrap的下拉菜单组件与导航条
前期准备:bootstrap的css文件和js文件先引入 Bootstrap 组件-拉下菜单(class+js) 下拉菜单必需三级结构 <div class="dropdown&quo ...
- Linux(Centos7)搭建LAMP(Apache+PHP+Mysql环境)
目录 Linux搭建LAMP(Apache+PHP+Mysql环境)Centos7 一. 检查系统环境 1.确认centos版本 2.检查是否安装过apache 3.检查是否安装过Mysql 4.清理 ...
- Centos7部署ejforum论坛(Java+tomcat+mysql)
前面搭建Java环境和tomcat环境. 下面进行实战,搭建ejforum论坛 ejforum论坛源码:https://www.lanzous.com/i45rcoh Centos7安装MySQL数据 ...
- python批量创建txt文件,以demo.txt内的内容为文件名
#批量创建txt文件import sys,osa=open("demo.txt")n=0aList=[]for line in a.readlines(): aList.appen ...
- MyBatis 插入记录同时获取主键
MyBatis 插入记录同时获取主键 MyBatis 插入记录同时获取主键的系统界面 useGeneratedKeys 属性 keyProperty 属性 keyColumn 属性 selectKey ...
- luoguP3704 [SDOI2017]数字表格
题意 默认\(n\leqslant m\) 所求即为:\(\prod\limits_{i=1}^n\prod\limits_{j=1}^mf[\gcd(i,j)]\) 枚举\(\gcd(i,j)\)变 ...
- 手机日期控件mobiscroll
query Mobiscroll是一个用于触摸设备(Android phones, iPhone, iPad, Galaxy Tab)的日期和时间选择器jQuery插件.以及各种滑动插件可以让用户很方 ...
- NeuHub图像垃圾分类api和百度图像识别api
京东 NeuHub图像垃圾分类申请:http://neuhub.jd.com/gwtest/init/242 文档:https://aidoc.jd.com/image/garbageClassifi ...
- CentOS7 部署nfs服务
参考博客 参考博客 https://blog.51cto.com/addam/1576144 错误1: 客户端挂载nfs报错mount: wrong fs type, bad option, bad ...