【rabbitMQ】-延迟队列-模拟控制智能家居的操作指令

这篇具有很好参考价值的文章主要介绍了【rabbitMQ】-延迟队列-模拟控制智能家居的操作指令。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

这个需求为控制智能家居工作,把控制智能家居的操作指令发到队列中,比如:扫地机、洗衣机到指定时间工作
 
一.什么是延迟队列?
延迟队列存储的对象是对应的延迟消息,所谓“延迟消息” 是指当消息被发送以后,并不想让消费者立刻拿到消息,而是等待特定时间后,消费者才能拿到这个消息进行消费。

 

二.如何设置延迟队列?

1.配置2个业务队列(扫地机执行命令业务队列,洗衣机执行命令业务队列),绑定到业务交换机上

2.为业务队列配置死信交换机和路由key

3.为死信交换机配置2个延迟队列(扫地机执行命令延迟队列,洗衣机执行命令延迟队列)
 
【rabbitMQ】-延迟队列-模拟控制智能家居的操作指令

 


 


 

【rabbitMQ】-延迟队列-模拟控制智能家居的操作指令

【rabbitMQ】-延迟队列-模拟控制智能家居的操作指令

【rabbitMQ】-延迟队列-模拟控制智能家居的操作指令

【rabbitMQ】-延迟队列-模拟控制智能家居的操作指令

 

三.延迟队列代码落地

 

using MengLin.Shopping.RabbitMQ.Common;
using RabbitMQ.Client;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace MengLin.Shopping.RabbitMQ.MsgProducer.QueueType.Delay
{
    /// <summary>
    /// 延迟队列
    /// </summary>
    public class DelayQueue
    {
        public static void SendMessage()
        {
            //业务交换机
            var exchangeBusiness = "business-exchange";
            
            var queueBusinessSaoDiJiCommand = "SaoDiJiCommand-business-queue";//扫地机执行命令业务队列
            var routeKeyBusinessSaoDiJiCommand = "SaoDiJiCommand-business-routekey";//扫地机执行命令路由key

            var queueBusinessXiYiJiCommand = "XiYiJiCommand-business-queue";//洗衣机执行命令业务队列
            var routeKeyBusinessXiYiJiCommand = "XiYiJiCommand-business-routekey";//洗衣机执行命令路由key

            //死信交换机
            var exchangeDeadLetter = "deadLetter-exchange";

            //扫地机执行命令的延时队列和路由key
            var delaySaoDiJiCommandQueue = "SaoDiJiCommand-delay-queue";
            var routeKeyDelaySaoDiJi = "SaoDiJi-delay-routekey";

            //洗衣机执行命令的延时队列和路由key
            var delayXiYiJiCommandQueue = "XiYiJiCommand-delay-queue";
            var routeKeyDelayXiYiJi = "XiYiJi-delay-routekey";

            using (var connection = RabbitMQHelper.GetConnection())
            {
                using (var channel = connection.CreateModel())
                {
                    //创建死信交换机(死信交换机对交换机类型没有要求)
                    channel.ExchangeDeclare(exchange: exchangeDeadLetter, type: ExchangeType.Direct, durable: true, autoDelete: false);

                    //创建扫地机执行命令的延时队列
                    channel.QueueDeclare(queue: delaySaoDiJiCommandQueue, durable: true, exclusive: false, autoDelete: false);

                    //创建洗衣机执行命令的延时队列
                    channel.QueueDeclare(queue: delayXiYiJiCommandQueue, durable: true, exclusive: false, autoDelete: false);

                    //绑定死信交换机到扫地机执行命令的延时队列
                    channel.QueueBind(exchange: exchangeDeadLetter, queue: delaySaoDiJiCommandQueue, routingKey: routeKeyDelaySaoDiJi);

                    //绑定死信交换机到洗衣机执行命令的延时队列
                    channel.QueueBind(exchange: exchangeDeadLetter, queue: delayXiYiJiCommandQueue, routingKey: routeKeyDelayXiYiJi);

                    //创建业务交换机
                    channel.ExchangeDeclare(exchange: exchangeBusiness, type: ExchangeType.Direct, durable: true, autoDelete: false);

                    //创建扫地机命令业务队列
                    Dictionary<string, object> dic1 = new Dictionary<string, object>();
                    dic1.Add("x-expires", 30 * 6 * 10000); //30分钟后扫地机命令业务队列自动干掉
                    dic1.Add("x-message-ttl", 10 * 6 * 10000);//设置消息在扫地机命令业务队列中的存活时间,即过期时间(消息如果10分钟内没有消费,就会放入扫地机执行命令的延时队列里)
                    dic1.Add("x-dead-letter-exchange", exchangeDeadLetter);//过期消息转向路由  
                    dic1.Add("x-dead-letter-routing-key", routeKeyDelaySaoDiJi);//设置死信交换机的路由key,死信交换机会根据路由key去找到对应的延迟队列
                    channel.QueueDeclare(queue: queueBusinessSaoDiJiCommand, durable: true, exclusive: false, autoDelete: false, arguments:dic1);
                    //绑定业务交换机到扫地机命令业务队列
                    channel.QueueBind(queue: queueBusinessSaoDiJiCommand, exchange: exchangeBusiness, routingKey: routeKeyBusinessSaoDiJiCommand);


                    //创建洗衣机命令业务队列
                    Dictionary<string, object> dic2 = new Dictionary<string, object>();
                    dic2.Add("x-expires", 30 * 6 * 10000); //30分钟后洗衣机命令业务队列自动干掉
                    dic2.Add("x-message-ttl", 20 * 6 * 10000);//设置消息在洗衣机命令业务队列中的存活时间,即过期时间(消息如果20分钟内没有消费,就会放入洗衣机执行命令的延时队列里)
                    dic2.Add("x-dead-letter-exchange", exchangeDeadLetter);//过期消息转向路由  
                    dic2.Add("x-dead-letter-routing-key", routeKeyDelayXiYiJi);//过期消息转向路由相匹配routingkey  
                    channel.QueueDeclare(queue: queueBusinessXiYiJiCommand, durable: true, exclusive: false, autoDelete: false, arguments: dic2);
                    //绑定业务交换机到洗衣机命令业务队列
                    channel.QueueBind(queue: queueBusinessXiYiJiCommand, exchange: exchangeBusiness, routingKey: routeKeyBusinessXiYiJiCommand);

                    Console.WriteLine("请输入发送的内容:");
                    var message = Console.ReadLine();
                    var body = Encoding.UTF8.GetBytes(message);
                  

                    //消息持久化,既然都要用到死信队列了,说明这条消息还是比较重要的
                    var properties = channel.CreateBasicProperties();
                    properties.Persistent = true;

                    if(message.Contains("aa"))
                    {
                        //发布消息到扫地机命令业务队列
                        channel.BasicPublish(exchange: exchangeBusiness,
                                             routingKey: routeKeyBusinessSaoDiJiCommand,
                                             basicProperties: properties,
                                             body: body);
                    }
                    else
                    {
                        //发布消息洗衣机命令业务队列
                        channel.BasicPublish(exchange: exchangeBusiness,
                                             routingKey: routeKeyBusinessXiYiJiCommand,
                                             basicProperties: properties,
                                             body: body);
                    }

                }
            }
        }
    }
}

 文章来源地址https://www.toymoban.com/news/detail-460219.html

到了这里,关于【rabbitMQ】-延迟队列-模拟控制智能家居的操作指令的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • LabVIEW智能家居控制系统

    LabVIEW智能家居控制系统 介绍了一个基于LabVIEW的智能家居控制系统的开发过程。该系统利用LabVIEW软件与硬件设备相结合,通过无线网络技术实现家居环境的实时监控与控制,提升居住舒适度和能源使用效率。 项目背景:随着科技的发展和生活水平的提高,智能家居系统越来

    2024年02月21日
    浏览(51)
  • 智能家居控制系统:让生活更智能、更便捷

    智能家居控制系统是一种集成了智能化技术的家居系统,通过连接各种智能设备和传感器,实现远程控制、自动化管理和智能化服务,让生活更智能、更便捷。以下是关于智能家居控制系统的几个方面的分点论述: 智能家居控制系统可以通过手机App或者互联网实现远程控制家

    2024年02月20日
    浏览(44)
  • 智能家居(3)---socket网络控制线程封装

    封装socket网络线程实现对智能家居中各种灯光的控制 main.Pro(主函数) inputCommand.h(控制类) socketControl.c(socket)

    2024年02月13日
    浏览(46)
  • 别墅智能家居控制系统解决方案

    别墅智能家居控制系统解决方案 如果说建筑是凝固的音乐,那么完美的智能家居控制系统则是这首乐曲上绝妙的音符。在科技发达、物质富庶的今天,自控系统已不单纯是实现室内基本安防、照明、采暖的工具,而且是建筑装饰的一种实用艺术品,是自动化技术与建筑艺术的

    2024年02月15日
    浏览(51)
  • 基于物联网的智能家居控制系统设计

    智能家居,一种以住宅为平台,利用综合布线技术,网络通讯技术,安防技术,自动化控制技术,以及语音控制技术,具有很高的学习价值,同时作文毕业设计也是不错的选择。 对于家庭智能家居系统,通信范围较短,因此蓝牙或 WIFI 等较短距离通信方式可能更合适。在带宽

    2024年03月24日
    浏览(58)
  • 智能家居(2)---串口通信(语音识别)控制线程封装

    封装语音线程(语音通过串口和主控设备进行交流)实现对智能家居中各种灯光的控制 mainPro.c(主函数) inputCommand.h(控制类) voiceControl.c(语音)

    2024年02月13日
    浏览(45)
  • AI在智能家居控制中心中的应用:提升控制效率

    作者:禅与计算机程序设计艺术 智能家居控制中心(IaC)是一个集成化的智能控制系统,它能够从各种设备采集数据、分析处理并实时监控用户需求,并据此优化控制策略,为用户提供更加舒适、安全、健康的家居环境。作为一个高度自动化的系统,IaC需要快速响应各种变化

    2024年02月07日
    浏览(55)
  • 毕业/课程设计——基于STM32的智能灯光控制系统(物联网、智能家居、手机APP控制、语音控制)

            文章 首先介绍本系统所包含的功能 ,主要包含六方面功能, 之后逐步分享开发过程 ,其流程如下:点亮灯带(三极管) → 调节灯光亮度(PWM)→为系统添加远程控制功能→为系统添加语音识别功能→添加超声波姿态监测功能→添加OLED显示功能         特别

    2024年02月03日
    浏览(66)
  • 基于物联网的智能家居控制系统设计(1)

    智能家居,一种以住宅为平台,利用综合布线技术,网络通讯技术,安防技术,自动化控制技术,以及语音控制技术,具有很高的学习价值,同时作文毕业设计也是不错的选择。 控制系统通讯方式及硬件的选择 对于家庭智能家居系统,通信范围较短,因此蓝牙或 WIFI 等较短

    2024年04月14日
    浏览(65)
  • 基于单片机的智能家居远程控制系统

    摘要:单片机是当前常用的一种控制系统,随着人们生活走向智能化,单片机逐渐被应用于智能家居之中。本文是基于单片机设计的一种智能家居远程控制系统,并将无线数据传输以及计算机网络等当前较为先进的技术纳入其中,可实现数据自动采集以及自动调控。除此之外

    2024年02月22日
    浏览(60)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包