安装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

最新文章

  1. 【Yeoman】热部署web前端开发环境
  2. arcgis_engine_develop_error_42
  3. 验证码点击刷新 this.src=this.src+'?'+Math.random()
  4. SMO序列最小最优化算法
  5. 队列与DelphiXe新语法
  6. HTML笔记1
  7. JQuery在iframe中实现 点击后选中当前栏目的样式
  8. IOS — 关于Socket传输文件需要自定义延时或者包大小的情况
  9. Struts2_1_struts2建立一个执行环境
  10. 编码器芯片MLX90363的使用
  11. Python Selenium设计模式-POM
  12. JavaScript要点汇总——The Most Important
  13. Linux 配置vim编辑器
  14. 滚动公告--jq
  15. Python自动化运维之pexpect从入门到精通
  16. Shell脚本笔记(二)Shell变量
  17. 一个Tparams小测试
  18. scala 下载
  19. ABP 邮箱设置
  20. PAT甲题题解-1014. Waiting in Line (30)-模拟,优先级队列

热门文章

  1. P2258 子矩阵——搜索+dp
  2. 谈下python的GIL
  3. 做动画animation--matplotlib--python2和3通用代码
  4. TLS整理(下):TLS如何保证安全
  5. python统计apache、nginx访问日志IP访问次数并且排序(显示前20条)【转】
  6. 实现一个自己的IOC
  7. UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc3 in position 0: invalid continuation byte
  8. jvm 命令使用调优 通过jstat、jmap对java程序进行性能调优
  9. 到底啥是鸭子类型(duck typing)带简单例子
  10. Qt编写气体安全管理系统19-端口管理