zoukankan      html  css  js  c++  java
  • Redis学习笔记~实现消息队列比MSMQ更方便

    什么是队列:简单的说就是数据存储到一个空间里(可以是内存,也可以是物理文件),先存储的数据对象,先被取出来,这与堆栈正好相反,消息队列也是这样,将可能出现高并发的数据进行队列存储,并按着入队的顺序依次处理,实现消息队列的工具有很多,如微软的MSMQ,及一些开源的KV存储工具,今天主要介绍用Redis实现消息队列。

    这是我的redis项目结构

    image

    redis服务有一个console的程序,可以支持在windows和linux下运行。

    我用MVC应用程序来作这个例子,由表单向内存中写信息,然后每5秒中从内存中将消息取出来,看代码

    /// <summary>
      /// 消息对象类型
      /// </summary>
      public class MessageQuene
      {
          static System.Timers.Timer timer = new System.Timers.Timer(5000);
          public static ChatModels CurrentChatModels = new ChatModels();
          static Redis.Utils.RedisClient redisClient;
          static MessageQuene()
          {
              redisClient = new Redis.Utils.RedisClient();
              timer.AutoReset = true;
              timer.Enabled = true;
              timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);//subscribe a event
              timer.Start();
    
          }
          private static void timer_Elapsed(object sender, ElapsedEventArgs e)
          {
              CurrentChatModels = (ChatModels)redisClient.LeftPop("MessageQuene");
          }
      }

    前台显示的action

    public ActionResult Index()
     {
         ViewData["pop"] = MessageQuene.CurrentChatModels == null ? "没?有D记?录?" : MessageQuene.CurrentChatModels.Chat;
         ViewData["MSMQ"] = redisClient.ListRange("MessageQuene") == null
           ? new List<ChatModels>()
           : redisClient.ListRange("MessageQuene").Cast<ChatModels>().ToList();

    }

    表单提交的action

    image

    事件上,如果我们在项目中用到消息队列时,可以直接使用ViewData["pop"]这个对象,它就是当前取出的队列元素,我们可以对它进行数据操作等。

  • 相关阅读:
    angularjs 学习笔记(一)
    iconfont项目成员添加不进去的问题
    服务器webapi集成极光推送学习笔记
    winform closing事件注册
    asp.net core webapi 似乎未安装在 IIS 中承载 .NET Core 项目所需的 AspNetCoreModule。请尝试修复 Visual Studio 以纠正该问题。
    css 行内元素设置宽高
    透过浏览器看HTTP缓存[转载]
    矢量字体图标
    HTML5新特性之WebRTC[转]
    一个前后端分离方案[转载]
  • 原文地址:https://www.cnblogs.com/zxtceq/p/6126624.html
Copyright © 2011-2022 走看看