zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Django--templates(模板层)
    基于 Hive 的文件格式:RCFile 简介及其应用
    Gobblin采集kafka数据
    Scala 中下划线的用途
    Gobblin编译支持CDH5.4.0
    Kafka到Hdfs的数据Pipeline整理
    Hadoop NameNode的ZKFC机制
    Windows下Eclipse提交MR程序到HadoopCluster
    Kettle实现MapReduce之WordCount
    hadoop中MapReduce多种join实现实例分析
  • 原文地址:https://www.cnblogs.com/jerryqi/p/11793788.html
Copyright © 2011-2022 走看看