.NetCore 3.1 项目中如何使用Redis的发布订阅(MQ)

1.Redis 发布订阅(了解)

Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。
Redis 客户端可以订阅任意数量的频道。
下图展示了频道 channel1 , 以及订阅这个频道的三个客户端 —— client2 、 client5 和 client1 之间的关系:
在这里插入图片描述
当有新消息通过 PUBLISH 命令发送给频道 channel1 时, 这个消息就会被发送给订阅它的三个客户端:
在这里插入图片描述

2.开启Redis服务(虚拟系统CentOS7上运行)

在这里插入图片描述

3. dotnetCore 3.1 项目主要代码

1.订阅端(获取消息,根据消息执行一些操作)

using System;
using StackExchange.Redis;

namespace Sub
{
    class Program
    {
        static void Main(string[] args)
        {
	        //创建连接
	        using (ConnectionMultiplexer redis = ConnectionMultiplexer.Connect("192.168.153.131:6379"))
	        {
				ISubscriber sub = redis.GetSubscriber();

		        //订阅名为 messages 的通道

		        sub.Subscribe("redisChat", (channel, message) => {

			        //输出收到的消息
			        Console.WriteLine($"[{DateTime.Now:HH:mm:ss}] {message}");

					if (message == "yes")
					{
						todoSomething();
					}
					else
					{
						Console.WriteLine("未获取指定的信息,什么也不做!");
					}
				

				});
				Console.WriteLine("已订阅 redisChat");
		        Console.ReadKey();
			}

	        
        }

		/// <summary>
		/// 定义你要执行的操作
		/// </summary>
		public static void todoSomething()
		{
			Console.WriteLine("执行你要做的操作....");
		    Console.WriteLine("已经执行完你要做的操作。");
		}
    }
}
  1. 发布端(发布消息,触发源)
using System;
using StackExchange.Redis;

namespace Pub
{
    class Program
    {
        static void Main(string[] args)
        {
			//创建连接
	        using (ConnectionMultiplexer redis = ConnectionMultiplexer.Connect("192.168.153.131:6379"))
	        {
				ISubscriber sub = redis.GetSubscriber();

		        Console.WriteLine("请输入任意字符,输入exit退出");

		        string input;

		        do
		        {
			        input = Console.ReadLine();
			        sub.Publish("redisChat", input);
		        } while (input != "exit");
			}
		}
    }
}

项目中需要NuGet引入StackExchange包:
在这里插入图片描述

4.redis消息发布订阅的缺点

发布端可接受端必须同时保持在线连接,否则的话就会有消息遗漏。比如接收端掉线,在掉线期间发布端发布的消息并不会缓存下来等接收端上线后再接收,而是完全错过了就不再有。因此呢,对于想要使用MQ完成重要业务处理,这是不足取的,毕竟redis中的消息机制也不是专业的。专业的都会自动移步到rabbitMQ等专业的消息中间件了。
还有一种缺点,说是发布的消息频繁太多会造成堵塞以致于崩掉。这个倒没有去测试。也有说这个bug在新版本中已经修复了。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值