编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

你不知道吧,其实Redis实现消息队列比MSMQ更方便

wxchong 2024-07-21 07:05:05 开源技术 9 ℃ 0 评论

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

这是我的redis项目结构

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

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

关注我,后续更多干货奉上!

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表