前言:

在发布完:开源:Taurus.DTC 微服务分布式事务框架,支持 .Net 和 .Net Core 双系列版本,之后想想,好像除了事务外,感觉里面多了一个任务发布订阅的基础功能。

本想既然都有了基础发布订阅功能了,那要不要顺带加上延时发布功能呢?加上了会不会让事务组件不纯了?

经过一翻深思,是在其上补上功能,还是,重新写一个组件,起初起名是个难题,因为 DTC 也可以是 Distributed Task Cxxxxx, 组件重名了?

经过一翻英文大作战,找到了:Distributed Task Scheduler,简写可以是DTS了,才开始重启一个组件。

于是就有了这个Taurus.DTS 任务组件,而且功能除了原有的即时任务发布订阅,和本来想加上的延时任务,后面又补上了基于Cron表达式的定时任务,和广播群发任务。

经过一翻大作战,有 Taurus.DTC 的基础代码作底层支持,花了大几天,解决了各种疑难杂症之后,终于出来了。

1、开源地址:

https://github.com/cyq1162/Taurus.DTS

2、Nuget 包引用ID:

由于 CYQ.Data Orm 组件本身支持10多种数据库,因此提供的包,只根据消息队列的需要分拆提供。

默认Taurus.DTS 支持同时使用 RabbitMQ 和 Kafka 两种消息队列。

如果一个项目中只用RabbitMQ,则引入 Tarurus.DTS.RabbitMQ,减少对 Kafka 的依赖包。

编绎的版本:支持太多,发布是个苦力活:

.Net 系列:由于引用依赖关系(RabbitMQ最低是 4.0,Kafka最低是 4.5);

.Net Core系列、支持 2.1 到 8.0 版本及以后。

Standard 标准库:支持2.1 及以后。

3、Taurus.DTS 微服务分布式任务框架基础说明:

基础说明:

1、框架分为: Client(客户端,即任务发起端)和 Server(服务端,即方法订阅方)。

2、框架支持:即时任务、延时任务、Cron表达式任务定时任务、广播任务,四种方式。

3、项目需要配置的参数:1、数据库(可选);2、MQ(必选)。

数据存储:

可选择数据库(MSSQL、MySql、Oracle、PostgreSql 等 CYQ.Data 所支持的10多种数据库之一)

MSSQL配置示例如下:

{
"ConnectionStrings": {
"DTS.Server.Conn": "server=.;database=MSLog;uid=sa;pwd=123456"
}
}

消息队列:

目前消息队列支持 RabbitMQ 或者 Kafka(配置其中一方即可):

{
"AppSettings": {
"DTS.Server.Rabbit":"127.0.0.1;guest;guest;/",//ip;username;password;virtualpath;
"DTS.Server.Kafka":"127.0.0.1:9092"
}
}

以上配置为Server端,客户端更改 Server 为 Client 即可。

4、Server 端 使用示例:

1、Nuget 搜索 Taurus.DTS 引入工程项目中。

2、如果是 ASP.Net Core 程序:Program 或 Startup 添加服务使用引入:

  services.AddTaurusDts(); // 服务添加。
app.UseTaurusDts(TaskStartType.Server); //服务使用,启用服务端

3、appsettings.json 配置基本属性:

  {
"ConnectionStrings": {
"DTS.Server.Conn": "host=localhost;port=3306;database=cyqdata;uid=root;pwd=123456;Convert Zero Datetime=True;"
},
"AppSettings": {
"DTS.Server.Rabbit": "127.0.0.1;guest;guest;/" //IP;UserName;Password;VirtualPaath
}

4、选择数据库对应的依赖组件,如MySql,可以:

Nuget 上可以搜索 MySql.Data 、或者 CYQ.Data.MySql (会自动引入MySql.Data)  都可, 引入项目即可。

5、代码编写,可以参考源码中提供的示例代码,如下为控制台示例代码:

using System;
using Taurus.Plugin.DistributedTask;
namespace Console_App_Server { internal class Program
{ static void Main(string[] args)
{ DTSConfig.Server.Rabbit = "127.0.0.1;guest;guest;/";
//DTSConfig.Server.Kafka = "127.0.0.1:9092;";
//DTSConfig.Server.Conn = DTSConfig.Client.Conn; DTSConfig.ProjectName = "ConsoleApp5"; DTS.Server.Start();//start client and server Console.WriteLine("---------------------------------------"); Console.ReadLine();
} } /// <summary>
/// 服务端 server class need to public
/// </summary>
public class Server
{
[DTSSubscribe("DoInstantTask")]
public static bool A(DTSSubscribePara para)
{
para.CallBackContent = "show you a.";
return true;
} [DTSSubscribe("DoDelayTask")]
private static bool B(DTSSubscribePara para)
{
para.CallBackContent = "show you b.";
return true;
}
[DTSSubscribe("DoCronTask")]
private static bool C(DTSSubscribePara para)
{
para.CallBackContent = "show you c.";
return true;
}
/// <summary>
/// 定时任务
/// </summary>
[DTSSubscribe("DoBroadastTask")]
private static bool TimerTask(DTSSubscribePara para)
{
para.CallBackContent = "show you d.";
return true;
}
} }

5、Client 端 使用示例:

1、Nuget 搜索 Taurus.DTS 引入工程项目中。

2、如果是ASP.Net Core 程序:Program 或 Startup 添加服务使用引入:

  services.AddTaurusDts(); // 服务添加
app.UseTaurusDts(StartType.Client); //服务使用,启用服务端

3、appsettings.json 配置基本属性:

  {
"ConnectionStrings": {
"DTS.Client.Conn": "host=localhost;port=3306;database=cyqdata;uid=root;pwd=123456;Convert Zero Datetime=True;"
},
"AppSettings": {
"DTS.Client.Rabbit": "127.0.0.1;guest;guest;/" //IP;UserName;Password;VirtualPaath
}

4、选择数据库对应的依赖组件,如MySql,可以:

Nuget 上可以搜索 MySql.Data 、或者 CYQ.Data.MySql (会自动引入MySql.Data)  都可, 引入项目即可。

5、代码编写,可以参考源码中提供的示例代码,如下为控制台示例代码:

using System;
using System.Threading;
using Taurus.Plugin.DistributedTask;
namespace Console_App_Client { internal class Program
{ static void Main(string[] args)
{ DTSConfig.Client.IsPrintTraceLog = false;
//AppConfig.Redis.Servers = "127.0.0.1:6379"; DTSConfig.Client.Rabbit = "127.0.0.1;guest;guest;/";
//DTSConfig.Client.Kafka = "127.0.0.1:9092;";
DTSConfig.Client.Conn = "server=.;database=mslog;uid=sa;pwd=123456"; DTSConfig.ProjectName = "ConsoleApp5"; DTS.Client.Start();//start client and server Console.WriteLine("---------------------------------------");
Console.WriteLine("1-InstantTask、2-DelayTask(1Minutes)、3-CronTask、4-DeleteCronTask、5-BroadastTask");
Console.WriteLine("Input :1、2、3、4、5,Press Enter.");
while (true)
{
string line = Console.ReadLine();
try
{
Client.Run(int.Parse(line));
}
catch(Exception err)
{
Console.WriteLine(err.Message);
} } }
} /// <summary>
/// 客户端 client class need to public if has callback method.
/// </summary>
public class Client
{
public static void Run(int i)
{ if (i == 2)
{
//发布一个延时1分钟的任务
DTS.Client.Delay.PublishAsync(1, "i publish a delay task.", "DoDelayTask", "DelayCallBack");
Console.WriteLine("Wait for 1 minute...");
}
else if (i == 3)
{
//发布一个秒在30时的循环任务。
DTS.Client.Cron.PublishAsync("10,30,50 * * * * ?", "i publish a timer task with cron express.", "DoCronTask", "CronCallBack");
Console.WriteLine("Wait for execute task when second is 10,30,50...");
}
else if (i == 4)
{
//发布一个秒在30时的循环任务。
DTS.Client.Cron.DeleteAsync("DoCronTask", null, "CronCallBack");
}
else if (i == 5)
{
//发布一个广播任务
DTS.Client.Broadast.PublishAsync("i publish a task for all server.", "DoBroadastTask", "BroadastCallBack");
}
else
{
for (int k = 0; k < 1; k++)
{
//发布一个即时任务
DTS.Client.Instant.PublishAsync("i publish a task instantly.", "DoInstantTask", "InstantCallBack");
Console.WriteLine(k);
} }
} [DTSCallBack("InstantCallBack")]
[DTSCallBack("DelayCallBack")]
[DTSCallBack("CronCallBack")]
[DTSCallBack("BroadastCallBack")]
private static void OnCallBack(DTSCallBackPara para)
{
Console.WriteLine("Client callback : " + para.TaskType + " - " + para.CallBackKey + " - " + para.CallBackContent);
}
} }

6、Demo 运行示例:

demo 地址:https://github.com/cyq1162/Taurus.DTS/tree/master/demo

启动运行截图:

输入1,发布即时任务:

7、其它:CYQ.Data 支持的数据库链接语句示例

###--------------------------------------------------------###

   Txt::  Txt Path=E:\
Xml:: Xml Path=E:\
Access:: Provider=Microsoft.Jet.OLEDB.4.0; Data Source=E:\cyqdata.mdb
Sqlite:: Data Source=E:\cyqdata.db;failifmissing=false;
MySql:: host=localhost;port=3306;database=cyqdata;uid=root;pwd=123456;Convert Zero Datetime=True;
Mssql:: server=.;database=cyqdata;uid=sa;pwd=123456;provider=mssql;
Sybase:: data source=127.0.0.1;port=5000;database=cyqdata;uid=sa;pwd=123456;provider=sybase;
Postgre: server=localhost;uid=sa;pwd=123456;database=cyqdata;provider=pg;
DB2: Database=SAMPLE;User ID=administrator;Server=127.0.0.1;password=1234560;provider=db2;
FireBird user id=SYSDBA;password=123456;database=d:\\test.dbf;server type=Default;data source=127.0.0.1;port number=3050;provider=firebird;
Dameng:: user id=SYSDBA;password=123456789;data source=127.0.0.1;schema=test;provider=dameng;
KingBaseES server=127.0.0.1;User Id=system;Password=123456;Database=test;Port=54321;schema=public;provider=kingbasees;
Oracle ODP.NET::
Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=127.0.0.1)(PORT = 1521)))(CONNECT_DATA =(SID = orcl)));User ID=sa;password=123456 由于各种数据库链接语句基本一致,除了特定写法外,可以通过链接补充:provider=mssql、provider=mysql、provider=db2、provider=postgre等来区分。
###--------------------------------------------------------###

8、总结:

由于 Taurus.DTS 分布式任务发布组件的独立发布,原有发布的 Taurus.DTC 分布式事务组件,下一版本会移除掉其基础的任务发布订阅功能,保留事务的纯洁属性。

今天发布的 Taurus.DTS 组件,为 .Net 和  .Net Core 微服务系列又又贡献了一个新的组件。

后续会发布分布式锁的教程,这个已经在 CYQ.Data 里实现了,并且在也在 Taurus.DTC 和 Taurus.DTS 中使用到了。

开源:Taurus.DTS 微服务分布式任务框架,支持即时任务、延时任务、Cron表达式定时任务和广播任务。的更多相关文章

  1. 【推荐】微服务分布式企业框架Springmvc+mybatis+shiro+Dubbo+ZooKeeper+Redis

              摘要: 主要定位于互联网企业架构,已内置企业信息化系统的基础功能和高效的代码生成工具,包括:系统权限组件.数据权限组件.数据字典组件.核心工具 组件.视图操作组件.工作流组件.代码 ...

  2. Taurus.MVC 微服务框架 入门开发教程:项目部署:1、微服务应用程序常规部署实现多开,节点扩容。

    系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 本系列第一篇:Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单 ...

  3. Taurus.MVC 微服务框架 入门开发教程:项目部署:2、让Kestrel支持绑定多个域名转发,替代Ngnix使用。

    系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 本系列第一篇:Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单 ...

  4. Taurus.MVC 微服务框架 入门开发教程:项目部署:3、微服务应用程序版本升级:全站升级和局部模块升级。

    系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 本系列第一篇:Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单 ...

  5. Taurus.MVC 微服务框架 入门开发教程:项目集成:1、服务端:注册中心、网关(提供可运行程序下载)。

    系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 本系列第一篇:Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单 ...

  6. Taurus.MVC 微服务框架 入门开发教程:项目集成:2、客户端:ASP.NET Core(C#)项目集成:应用中心。

    系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 本系列第一篇:Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单 ...

  7. Taurus.MVC 微服务框架 入门开发教程:项目集成:5、统一的日志管理。

    系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 本系列第一篇:Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单 ...

  8. Taurus.MVC 微服务框架 入门开发教程:项目集成:4、默认安全认证与自定义安全认证。

    系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 本系列第一篇:Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单 ...

  9. Taurus.MVC 微服务框架 入门开发教程:项目部署:4、微服务应用程序发布到Docker部署(上)。

    系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 开源地址:https://github.com/cyq1162/Taurus.MVC 本系列第一篇:Tauru ...

  10. Taurus.MVC 微服务框架 入门开发教程:项目部署:5、微服务应用程序发布到Docker部署(下)。

    系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 开源地址:https://github.com/cyq1162/Taurus.MVC 本系列第一篇:Tauru ...

随机推荐

  1. Centos离线安装JDK+Tomcat+MySQL8.0+Nginx

    一.安装JDK 注:以下命令环境在Xshell中进行. 1.查询出系统自带的OpenJDK及版本 rpm -qa | grep jdk 2.如果显示已安装openjdk则对其进行卸载. #卸载 rpm ...

  2. Go 获取 IP 地址

    1. 获取本地IP地址 使用 net 包可以获取本地机器的 IP 地址.以下是一个获取本地 IP 地址的简单示例: package main import ( "fmt" &quo ...

  3. Aop限流实现解决方案

    01.限流 在业务场景中,为了限制某些业务的并发,造成接口的压力,需要增加限流功能. 02.限流的成熟解决方案 guava (漏斗算法 + 令牌算法) (单机限流) redis + lua + ip ...

  4. ezbypass-cat【目录穿透】

    ezbypass-cat[目录穿透][难度:4] 题目界面 尝试SQL注入无果,看题解发现是目录穿透,需要抓包才能得到flag. 解题步骤 随便输入用户名和密码抓包 更改请求方式(POST→GET), ...

  5. 【Python】【OpenCV】绘制外接矩形、外接圆

    外接矩形.外接圆: 1 import cv2 2 import numpy 3 4 img = cv2.imread('../img/img.png', -1) 5 ret, thresh = cv2 ...

  6. CENTOS docker拉取私服镜像

    概述 docker的应用越来越多,安装部署越来越方便,批量自动化的镜像生成和发布都需要docker镜像的拉取. centos6版本太老,docker的使用过程中问题较多,centos7相对简单容易. ...

  7. CentOS7 安装MySQL 8.0.28+

    MySQL的三大版本 a)MySQL Enterprise Edition:企业版本(付费)b)MySQL Cluster CGE:高级集群版(收费)c)MySQL Community Server: ...

  8. JavaFx之使用高版本JDK(二十八)

    JavaFx之使用高版本JDK(二十八) 如何使用高版本的jfx? 根据官网的需要手动引入jfx模块(运行参数:–module-path) 要知道高版本jfx已经集成了丰富的主流功能,例如视频编码,大 ...

  9. HDU 2709 Sumset DP 二进制

    原题链接 题意 给我们一个整数k,要求我们将k分成若干个二的整数幂(1, 2, 4, 8...)的加和形式,问我们所有的分法中,本质不同(即某个2的幂的数量不同)的形式有多少种,k最多为1000000 ...

  10. flex布局之美,以后就靠它来布局了

    写在前面 在很久很久以前,网页布局基本上通过table 元素来实现.通过操作table 中单元格的align 和valign可以实现水平垂直居中等 再后来,由于CSS 不断完善,便演变出了:标准文档流 ...