背景

  需要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 执行任务的更多相关文章

  1. WebSocket Client连接AspNetCore SignalR Json Hub

    突然有个需求,需要使用普通的websocket客户端去连接SignalR服务器. 因为使用的是.net core 版的signalr,目前对于使用非signalr客户端连接的中文文档几乎为0,在gay ...

  2. 微信小程序与AspNetCore SignalR聊天实例

    微信小程序与aspnetcore signalr实例 本文不对小程序与signalr做任何介绍,默认读者已经掌握 aspnetcore Signalr文档 小程序文档 写在之前 SignalR没有提供 ...

  3. Asp.NetCore+Microsoft.AspNetCore.SignalR前后端分离

    1.新建WebApi 2.安装Microsoft.AspNetCore.SignalR 3.新建一个集线器和消息类 using Microsoft.AspNetCore.SignalR; using ...

  4. Oracle client客户端简易安装网上文档一

    Oracle client客户端简易安装网上文档一-------------------------------------------------------------------------一. ...

  5. Tomcat配置错误导致Quartz执行两次问题

    以下基于tomcat服务器 我们通常将域名映射到指定服务器的端口上,以通过域名直接访问服务,如http://www.abc.com域名已绑定到本机的80端口,项目名wechat,则直接访问http:/ ...

  6. Android手机SSH Client客户端推荐JuiceSSH

    Windows上建立ssh服务器 参见: http://www.cnblogs.com/xred/archive/2012/04/21/2461627.html Android手机SSH Client ...

  7. ABP 找不到版本为 (>= 1.0.0-preview1-27891) 的包 Microsoft.AspNetCore.SignalR 错误

    错误描述: 下载ABP模板项目3.4.1的版本(当前最新版本),编译加载nuget包Microsoft.AspNetCore.SignalR时会报如下错误: 严重性     代码         说明 ...

  8. 关于mysql安装后在客户端cmd插入语句无法执行的问题

    关于mysql安装后在客户端cmd插入语句无法执行的问题 因为windows cmd默认字符集是gbk,当character_set_client=utf8时,cmd中出现中文会报错:characte ...

  9. 同一台电脑中同时安装oracle database 服务器端和oracle client 客户端时注意

    如果在一台电脑中同时安装oracle的客户端和服务器端软件, 一定要先安装oracle database 服务端,并进行相应的配置 listener.ORA. 然后再去安装oracle client ...

随机推荐

  1. vue---v-model的详细解答

    1.v-model:双向数据绑定的实现原理     等同于一个  v-bind  加   v-on <div id="app"> <!-- <input t ...

  2. bootstrap的下拉菜单组件与导航条

    前期准备:bootstrap的css文件和js文件先引入 Bootstrap 组件-拉下菜单(class+js) 下拉菜单必需三级结构 <div class="dropdown&quo ...

  3. Linux(Centos7)搭建LAMP(Apache+PHP+Mysql环境)

    目录 Linux搭建LAMP(Apache+PHP+Mysql环境)Centos7 一. 检查系统环境 1.确认centos版本 2.检查是否安装过apache 3.检查是否安装过Mysql 4.清理 ...

  4. Centos7部署ejforum论坛(Java+tomcat+mysql)

    前面搭建Java环境和tomcat环境. 下面进行实战,搭建ejforum论坛 ejforum论坛源码:https://www.lanzous.com/i45rcoh Centos7安装MySQL数据 ...

  5. python批量创建txt文件,以demo.txt内的内容为文件名

    #批量创建txt文件import sys,osa=open("demo.txt")n=0aList=[]for line in a.readlines(): aList.appen ...

  6. MyBatis 插入记录同时获取主键

    MyBatis 插入记录同时获取主键 MyBatis 插入记录同时获取主键的系统界面 useGeneratedKeys 属性 keyProperty 属性 keyColumn 属性 selectKey ...

  7. luoguP3704 [SDOI2017]数字表格

    题意 默认\(n\leqslant m\) 所求即为:\(\prod\limits_{i=1}^n\prod\limits_{j=1}^mf[\gcd(i,j)]\) 枚举\(\gcd(i,j)\)变 ...

  8. 手机日期控件mobiscroll

    query Mobiscroll是一个用于触摸设备(Android phones, iPhone, iPad, Galaxy Tab)的日期和时间选择器jQuery插件.以及各种滑动插件可以让用户很方 ...

  9. NeuHub图像垃圾分类api和百度图像识别api

    京东 NeuHub图像垃圾分类申请:http://neuhub.jd.com/gwtest/init/242 文档:https://aidoc.jd.com/image/garbageClassifi ...

  10. CentOS7 部署nfs服务

    参考博客 参考博客 https://blog.51cto.com/addam/1576144 错误1: 客户端挂载nfs报错mount: wrong fs type, bad option, bad ...