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

这篇具有很好参考价值的文章主要介绍了开源:Taurus.DTS 微服务分布式任务框架,支持即时任务、延时任务、Cron表达式定时任务和广播任务。。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言:

在发布完:开源: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

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

2、Nuget 包引用ID:

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

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

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

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

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

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

.Net Core系列、支持 2.18.0 版本及以后。

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

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

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

启动运行截图:

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

 输入1,发布即时任务:

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

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 中使用到了。文章来源地址https://www.toymoban.com/news/detail-801507.html

到了这里,关于开源:Taurus.DTS 微服务分布式任务框架,支持即时任务、延时任务、Cron表达式定时任务和广播任务。的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 分布式异步任务框架celery

    Celery是一个基于消息中间件的分布式任务队列框架,专门用于处理异步任务。它允许生产者发送任务到消息队列,而消费者则负责处理这些任务。Celery的核心特性包括异步执行、实时操作支持以及强大的调度能力,使其每天可以处理数以百万计的任务。 在Celery中,任务是以

    2024年04月10日
    浏览(46)
  • 分布式定时任务框架 PowerJob

    1.1 为什么需要使用定时任务调度 (1)时间驱动处理场景:整点发送优惠券,每天更新收益,每天刷新标签数据和人群数据。 (2)批量处理数据:按月批量统计报表数据,批量更新短信状态,实时性要求不高。 (3)异步执行解耦:活动状态刷新,异步执行离线查询,与内部

    2024年02月09日
    浏览(61)
  • 开源.NET8.0小项目伪微服务框架(分布式、EFCore、Redis、RabbitMQ、Mysql等)

    为什么说是伪微服务框架,常见微服务框架可能还包括服务容错、服务间的通信、服务追踪和监控、服务注册和发现等等,而我这里为了在使用中的更简单,将很多东西进行了简化或者省略了。 年前到现在在开发一个新的小项目,刚好项目最初的很多功能是比较通用的,所以

    2024年03月09日
    浏览(54)
  • 分布式定时任务调度框架Quartz

    Quartz是一个定时任务调度框架,比如你遇到这样的问题: 比如淘宝的待支付功能,后台会在你生成订单后24小时后,查看订单是否支付,未支付则取消订单 比如vip的每月自动续费功能 … 想定时在某个时间,去做某件事 Quartz是一套轻量级的任务调度框架,只需要定义了 Job(

    2024年02月04日
    浏览(45)
  • .NET CORE开源 DDD微服务 支持 多租户 单点登录 多级缓存、自动任务、分布式、日志、授权和鉴权 、网关 、注册与发现 系统架构 docker部署

    源代码地址https://github.com/junkai-li/NetCoreKevin 基于NET6搭建跨平台DDD思想WebApi架构、IDS4单点登录、多缓存、自动任务、分布式、多租户、日志、授权和鉴权、CAP、SignalR、 docker部署  如需简约项目可直接去除项目引用 解耦设计都可以单独引用 架构默认全部引用并启动 项目启动时

    2023年04月24日
    浏览(48)
  • 使用Docker部署开源分布式任务调度系统DolphinScheduler

    🔥 博客主页 : 小羊失眠啦. 🎥 系列专栏 : 《C语言》 《数据结构》 《Linux》 《Cpolar》 ❤️ 感谢大家点赞👍收藏⭐评论✍️ 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 本篇教程和大家分享一下DolphinSc

    2024年02月05日
    浏览(60)
  • 分布式任务调度框架Power-Job

    在大型业务业务系统中,不可避免会出现一些需要定时执行需求的场景,例如定时同步数据,定时清洗数据,定时生成报表,大量机器一同执行某个任务,甚至有些需要分布式处理的任务例如需要更新一大批数据,单机耗时太长需要进行任务分发,利用集群的计算能力等等

    2024年02月04日
    浏览(47)
  • 太强了!全新一代分布式任务调度与计算框架!

    大家好,我是 Java陈序员 。 我们在工作开发中,离不开任务调度。通过指定的间隔时间执行各类操作,来完成无需用户操作的任务。 目前市场上,有一些编程语言本身自带的定时任务工具,如 Java 中 Timer。也有一些比较成熟的定时任务框架,如 Quartz。现在大部分系统都是使

    2024年02月03日
    浏览(49)
  • 开源分布式任务调度系统DolphinScheduler本地部署与远程访问

    本篇教程和大家分享一下DolphinScheduler的安装部署及如何实现公网远程访问,结合内网穿透工具实现公网访问DolphinScheduler内网并进行远程办公,帮助开发人员进行远程任务调度及管理,提高工作效率。 DolphinScheduler是一款开源的分布式任务调度系统,它可以帮助开发人员更加方

    2024年02月03日
    浏览(51)
  • springcloud:新一代分布式定时任务框架——PowerJob

    之前我们讲解过主流的分布式定时任务框架xxl-job,随着技术的迭代更新,更多的定时任务框架也开始出现,今天我们来看一看新一代的定时任务框架 PowerJob PowerJob是基于java开发的企业级的分布式任务调度平台,与xxl-job一样,基于web页面实现任务调度配置与记录,使用简单,

    2024年02月02日
    浏览(68)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包