iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >C#通过rabbitmq如何实现定时任务
  • 299
分享到

C#通过rabbitmq如何实现定时任务

2023-06-15 06:06:01 299人浏览 薄情痞子
摘要

小编给大家分享一下C#通过RabbitMQ如何实现定时任务,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!环境准备需要在MQ中进行安装插件 地址链接插件介绍地址:h

小编给大家分享一下C#通过RabbitMQ如何实现定时任务,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

环境准备

需要在MQ中进行安装插件 地址链接
插件介绍地址:https://www.rabbitmq.com/blog/2015/04/16/scheduling-messages-with-rabbitmq/

使用场景

作为一个新的预支付订单被初始化放置,如果该订单在指定时间内未进行支付,则将被认为超时订单进行关闭处理;电商系统中应用较多,用户购买商品产生订单,但未进行支付,订单产生30分钟内未支付将关闭订单(且满足该场景数量庞大),不可能采用人工干预。

代码介绍

生产者

   var factory = new ConnectionFactory()            {                Uri = new Uri("MQ地址")            };                       using var connection = factory.CreateConnection();            using var channel = connection.CreateModel();            var exchangeName = "delay-exchange";            var routingkey = "delay.delay";            var queueName = "delay_queueName";            //设置Exchange队列类型            var argMaps = new Dictionary<string, object>()            {                {"x-delayed-type", "topic"}            };            //设置当前消息为延时队列            channel.ExchangeDeclare(exchange: exchangeName, type: "x-delayed-message", true, false, argMaps);            channel.QueueDeclare(queueName, true, false, false, argMaps);            channel.QueueBind(queueName, exchangeName, routingkey);            for (int i = 0; i < 3; i++)            {                var time = 1000 * 5;                var message = $@"发送时间为 {DateTime.Now:yyyy-MM-dd HH:mm:ss} 延时时间为:{time}";                var body = Encoding.UTF8.GetBytes(message);                var props = channel.CreateBasicProperties();                //设置消息的过期时间                props.Headers = new Dictionary<string, object>()                {                    {  "x-delay", 5000 }                };                channel.BasicPublish(exchange: exchangeName,                    routingKey: routingkey,                    basicProperties: props,                    body: body);                Console.WriteLine(message);            }            Console.ReadLine();

消费者(自动绑定队列写法)

var factory = new ConnectionFactory()            {                Uri = new Uri(MQ地址)            };            using var connection = factory.CreateConnection();            using var channel = connection.CreateModel();            var queueName = "delay_queueName";            channel.QueueDeclare(queueName, true, false, false, null);            var consumer = new EventingBasicConsumer(channel);            consumer.Received += (model, ea) =>            {                var body = ea.Body;                var message = Encoding.UTF8.GetString(body);                var routingKey = ea.RoutingKey;                Console.WriteLine($@"接受到消息的时间为 {DateTime.Now:yyyy-MM-dd HH:mm:ss},routingKey:{routingKey} message:{message} ");            };            channel.BasicConsume(queue: queueName,                autoAck: true,                consumer: consumer);            Console.ReadLine();

消费者(手动绑定队列写法)

  var factory = new ConnectionFactory()            {                Uri = new Uri(MQ地址)            };             using var connection = factory.CreateConnection();            using var channel = connection.CreateModel();            var exchangeName = "delay-exchange";            var routingkey = "delay.delay";            var queueName = "delay_queueName";            var autoDelete = true;            var argMaps = new Dictionary<string, object>()            {                {"x-delayed-type", "topic"}            };            channel.ExchangeDeclare(exchange: exchangeName, type: "x-delayed-message", true, false, argMaps);            channel.QueueDeclare(queueName, true, false, false, argMaps);            channel.QueueBind(queue: queueName, exchange: exchangeName, routingKey: routingkey);            //channel.QueueDeclare(queueName, true, false, false, null);            var consumer = new EventingBasicConsumer(channel);            consumer.Received += (model, ea) =>            {                var body = ea.Body;                var message = Encoding.UTF8.GetString(body);                var routingKey = ea.RoutingKey;                Console.WriteLine($@"接受到消息的时间为 {DateTime.Now:yyyy-MM-dd HH:mm:ss},routingKey:{routingKey} message:{message} ");            };            channel.BasicConsume(queue: queueName,                autoAck: true,                consumer: consumer);            Console.ReadLine();

最终实现效果(两个消费者)

C#通过rabbitmq如何实现定时任务

在上述实现中,其实主要靠以下参数来帮我们实现当前功能

声明Exchange中的 type: "x-delayed-message" 这个表明当前队列为延时消息队列
声明Exchange中arguments中的 {"x-delayed-type", "topic"} 当前表明当前队列为Topic模式
最后 我们在CreateBasicProperties的Header中设置 { "x-delay", 5000 }来达到消息延时的功能(单位为ms)

以上是“C#通过rabbitmq如何实现定时任务”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网精选频道!

--结束END--

本文标题: C#通过rabbitmq如何实现定时任务

本文链接: https://www.lsjlt.com/news/278406.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C#通过rabbitmq如何实现定时任务
    小编给大家分享一下C#通过rabbitmq如何实现定时任务,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!环境准备需要在MQ中进行安装插件 地址链接插件介绍地址:h...
    99+
    2023-06-15
  • C#通过rabbitmq实现定时任务(延时队列)
    本文主要讲解如何通过RabbitMQ实现定时任务(延时队列) 环境准备 需要在MQ中进行安装插件 地址链接 插件介绍地址:https://www.rabbitmq.com/blog/...
    99+
    2022-11-12
  • 如何通过RabbitMq实现动态定时任务详解
    目录一、需求背景二、方案思考(1)需求大致分析(2)可尝试的方案三、通过RabbitMQ实现延时任务并间接实现动态定时任务。(1)通过死信的方式实现延时信息消费(2)通过MQ延时插件...
    99+
    2022-11-12
  • Springboot怎么通过Scheduled实现定时任务
    小编给大家分享一下Springboot怎么通过Scheduled实现定时任务,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!定时任务一般会存在中大型企业级项目中,为...
    99+
    2023-05-30
    springboot
  • Spring多线程通过@Scheduled实现定时任务
    目录一、前言二、定时任务调度注解@Scheduled三、使用@Async实现异步调度建立spring线程池为异步调度方法指定线程池一、前言 技术的入门大多比较简单,把别人的代码复制过...
    99+
    2022-11-13
  • spring-boot如何通过@Scheduled配置定时任务及定时任务@Scheduled注解
    这篇文章主要介绍了spring-boot如何通过@Scheduled配置定时任务及定时任务@Scheduled注解,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。串行的定时任务...
    99+
    2023-05-30
    spring boot
  • Springboot如何实现定时任务
    这篇文章给大家分享的是有关Springboot如何实现定时任务的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。定时任务此处的定时,标注在方法上+注解,假如想修改生成环境的时间,不是很灵活,后面补充Quartz+bo...
    99+
    2023-06-17
  • redis如何实现定时任务
    这篇文章将为大家详细讲解有关redis如何实现定时任务,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。技术栈redis / nodeJs / koa技术重难点开启redis...
    99+
    2022-10-18
  • swoole如何实现定时任务
    这篇文章主要为大家展示了“swoole如何实现定时任务”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“swoole如何实现定时任务”这篇文章吧。方法:1、利用“swoole_timer_after...
    99+
    2023-06-29
  • Java如何实现定时任务
    今天小编给大家分享一下Java如何实现定时任务的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、TimerTimer是JAV...
    99+
    2023-07-02
  • node如何实现定时任务
    这篇文章主要介绍“node如何实现定时任务”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“node如何实现定时任务”文章能帮助大家解决问题。node实现定时任务的方法:1、利用setTimeOut和e...
    99+
    2023-07-04
  • php如何实现定时任务
    这篇文章将为大家详细讲解有关php如何实现定时任务,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。php实现定时任务的方法:首先新建一个php文件;然后使用ignore_user_abort方法设置程序在浏...
    99+
    2023-06-15
  • SpringBoot通过@Scheduled怎么实现定时任务及单线程运行
    这篇文章主要介绍“SpringBoot通过@Scheduled怎么实现定时任务及单线程运行”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“SpringBoot通过@Scheduled怎么实现定时任务及...
    99+
    2023-07-05
  • C#如何通过任务开启线程
    这篇文章将为大家详细讲解有关C#如何通过任务开启线程,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。通过任务开启线程1>Task开启线程using System;using Sys...
    99+
    2023-06-17
  • Python3中如何实现定时任务
    这篇文章给大家介绍Python3中如何实现定时任务,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1>定时更新微信token,需要2小时更新一次;2>商品定时上线;3>定时检测后台服务是否存活;使用Py...
    99+
    2023-06-02
  • php redis如何实现定时任务
    这篇文章主要介绍“php redis如何实现定时任务”,在日常操作中,相信很多人在php redis如何实现定时任务问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”php redis如何实现定时任务”的疑惑有所...
    99+
    2023-07-04
  • SpringBoot通过@Scheduled实现定时任务及单线程运行问题解决
    目录一、开启定时任务方法二、不同定时方式的解析1.fixedDelay和fixedRate,单位是毫秒,它们的区别就是:2.cron表达式:灵活三、实现定时任务四、解决定时任务单线程...
    99+
    2023-02-21
    springboot @scheduled实现定时任务 Springbootschedule单线程 springboot 定时任务
  • 如何在PHP中实现定时任务
    在现代的Web应用程序中,定时任务是至关重要的一环。它们可以帮助您在合适的时间自动化任务,如备份数据库,生成报告等。在PHP中实现定时任务是一件非常简单,可靠的任务,在本文中我们将介绍如何实现这一目标。在PHP中实现定时任务的第一步是创建一...
    99+
    2023-05-21
    PHP定时任务 时间计划任务 计划执行任务
  • SpringBoot动态定时任务如何实现
    这篇文章主要介绍了SpringBoot动态定时任务如何实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇SpringBoot动态定时任务如何实现文章都会有所收获,下面我们一起来看看吧。 执行定时任务的...
    99+
    2023-07-05
  • spring boot怎么整合quartz实现通过页面操作管理定时任务
    这篇文章主要介绍“spring boot怎么整合quartz实现通过页面操作管理定时任务”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“spring boot怎么整合...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作