dotnet core use Redis to publish and subscribe
安装Redis
同样我这边再次使用Docker, 方便快捷:
# 拉取镜像 docker pull redis # 运行镜像 docker run -d -p 6379:6379 --name redisapp redis
创建项目
这边依旧使用VS, 项目源码在Gitee.
连接驱动这里选择StackExchange.Redis,之前一直是用ServiceStack.Redis, 但是它已经逐渐商业化,4.0及以上版本都具有限制.
这里的发布订阅只是Redis功能的一部分, 所以我新建一个类把代码剥离出来:
public class Publish_Subscribe { public Publish_Subscribe(bool isPublisher) { //创建连接 using (ConnectionMultiplexer redis = ConnectionMultiplexer.Connect("localhost:6379")) { ISubscriber sub = redis.GetSubscriber(); if (isPublisher) Publisher(sub); else Subscriber(sub); } } private void Publisher(ISubscriber sub) { Console.WriteLine("Please Enter Message or ‘q’ to Exit"); string input; do { input = Console.ReadLine(); sub.Publish("messages", input); } while (input != "q"); } private void Subscriber(ISubscriber sub) { //订阅名为 messages 的通道 sub.Subscribe("messages", (channel, message) => { //输出收到的消息 Console.WriteLine($"[{DateTime.Now:HH:mm:ss}] {message}"); }); Console.WriteLine("Already Subscribe ‘messages’"); Console.ReadKey(); } }
然后修改启动函数:
static void Main(string[] args) { var ps = new Publish_Subscribe((args.Length > 0 && args[0] == "p")); //Console.WriteLine("Hello World!"); }
启动的时候加一个参数p则是启动生产者, 否则启动的就是消费者.
总结
我们可以启动多个发布者, 多个订阅者, 任何一个发布者发布的的消息都可以同时被所有订阅者收到. 后加入的订阅者不能收到之前发布的历史消息.
更多具体用法以及分发模型请参考这篇文章:https://www.cnblogs.com/stulzq/p/7542012.html
相关推荐
王道革 2020-11-25
wangdonghello 2020-11-03
Langeldep 2020-11-16
chenhualong0 2020-11-16
聚合室 2020-11-16
koushr 2020-11-12
MRFENGG 2020-11-11
guoyanga 2020-11-10
fackyou00 2020-11-10
Orangesss 2020-11-03
dongCSDN 2020-10-31
rainandtear 2020-10-30
Quietboy 2020-10-30
liuyulong 2020-10-29
fansili 2020-10-29
温攀峰 2020-10-23
jackbon 2020-10-19
kaixinfelix 2020-10-04