消息队列概念
文章源码Github地址:https://github.com/yangwohenmai/TEST/tree/master/Redis
在Redis中,消息队列的用法称之为 redis的 发布/订阅,以下是官方文档的介绍
redis的另一个常见用法是作为 发布/订阅消息分发工具;
这也很简单,并且在连接失败的情况下, ConnectionMultiplexer
将处理重新订阅所请求的信道的所有细节。
ISubscriber sub = redis.GetSubscriber();
同样,从 GetSubscriber
返回的对象是一个不需要存储的低成本的通道对象。
发布/订阅 API没有数据库的概念,但和之前一样,我们可以选择的提供一个异步状态。
注意,所有订阅都是全局的:它们不限于 ISubscriber
实例的生命周期。
redis中的 发布/订阅 功能使用命名的“channels”; channels 不需要事先在服务器上定义(这里有一个有趣的用法是利用每个用户的通知渠道类驱动部分的实时更新)
如在.NET中常见的,订阅采用回调委托的形式,它接受通道名称和消息:
sub.Subscribe("messages", (channel, message) => {
Console.WriteLine((string)message);
});
另外(通常在一个单独的机器上的一个单独的进程),你可以发布到该通道:
sub.Publish("messages", "hello");
这将(实际上瞬间)将“hello”写到订阅进程的控制台。 和之前一样,通道名和消息都可以是二进制的。
有关顺序和并发消息处理的使用文档说明,请参见 发布/订阅消息顺序 。
消息队列使用方法
消息队列要用到StackExchange.Redis.dll
可以到文章开头的github上下载下来,在bin文件夹里。
using ServiceStack.Redis;
using StackExchange.Redis;
using System;
using System.Threading;
namespace RedisMessageQueen
{
[Serializable]
public class Student
{
public string id;
public string name;
}
class Program
{
//static ConnectionMultiplexer redisClient = ConnectionMultiplexer.Connect("localhost");
static ConnectionMultiplexer redisClient = ConnectionMultiplexer.Connect("127.0.0.1:6379");
static void Main(string[] args)
{
ISubscriber sub = redisClient.GetSubscriber();
#region 消息队列方法1,自己发消息自己取数据
//建立一个监听对象,监听通道名为messages
//这部分相当于服务端
sub.Subscribe("messages", (channel, message) =>
{
//收到消息后将消息显示出来
Console.WriteLine((string)message);
});
Thread.Sleep(1000);
//通过Publish向messages通道发送消息,发送通道名称和监听通道名称要相同
//这部分可以写到客户端里
sub.Publish("messages", "hello");
sub.Publish("messages", "hello1");
sub.Publish("messages", "hello2");
#endregion
#region 消息队列方法2,在cmd客户端通过 SUBSCRIBE <通道名称> 命令来监听
Thread.Sleep(10000);
sub.Publish("redisMessages", "This message from C# program123");
string pub = Console.ReadLine();
//连发十条消息
for (int i = 0; i < 10; i++)
{
sub.Publish("redisMessages", pub);
}
#endregion
Console.ReadLine();
}
}
}
效果图如下:
运行程序,消息队列方法1中,sub.Subscribe("messages", (channel, message))监听到了程序自己发送的消息。
如果想做一个服务端一个客户端,只要制定好IP,端口,和消息通道名称就行了。
也可以打开cmd看监听效果,先在redis安装文件夹中打开cmd,启动redis-cli.exe。
然后输入SUBSCRIBE <通道名称> 命令来监听,我程序指定的通道名称是redisMessages,所以命令就是subscribe redisMessages
收到了程序发送的第一条消息:This message from C# program
我们也可以手写消息来测试发送 功能