zoukankan      html  css  js  c++  java
  • rabbitmq (四) 路由

    上文讲的是广播类型fanout

    本章讲

    direct和topic.

    当使用广播类型fanout的时候:

    routingKey字段不起作用.

    direct:精确匹配

    routingKey:匹配一个单词,消费者根据单词找到队列

    topic:通过正则匹配.'*'匹配一个单词.'#'匹配多个单词

    routingKey:是一个数组

    完整代码:

    direct publish:

    static void Main(string[] args)
            {
                var factory = new ConnectionFactory() { HostName = "your host name", UserName = "wc", Password = "wc" };
                using (var connection = factory.CreateConnection())
                using (var channel = connection.CreateModel())
                {
                    channel.ExchangeDeclare(exchange: "direct_logs",
                                            type: "direct");
    
                    var severity = (args.Length > 0) ? args[0] : "error";
                    var message = (args.Length > 1)
                                  ? string.Join(" ", args.Skip(1).ToArray())
                                  : "Hello World!";
                    var body = Encoding.UTF8.GetBytes(message);
                    channel.BasicPublish(exchange: "direct_logs",
                                         routingKey: severity,
                                         basicProperties: null,
                                         body: body);
                    Console.WriteLine(" [x] Sent '{0}':'{1}'", severity, message);
                }
    
                Console.WriteLine(" Press [enter] to exit.");
                Console.ReadLine();
            }

    direct subscribe:

            static void Main(string[] args)
            {
                var factory = new ConnectionFactory() { HostName = "your host name", UserName = "wc", Password = "wc" };
                using (var connection = factory.CreateConnection())
                using (var channel = connection.CreateModel())
                {
                    channel.ExchangeDeclare(exchange: "direct_logs",
                                            type: "direct");
                    var queueName = channel.QueueDeclare().QueueName;
                    args = new string[1] {
                        "error"
                    };
                    if (args.Length < 1)
                    {
                        Console.Error.WriteLine("Usage: {0} [info] [warning] [error]",
                                                Environment.GetCommandLineArgs()[0]);
                        Console.WriteLine(" Press [enter] to exit.");
                        Console.ReadLine();
                        Environment.ExitCode = 1;
                        return;
                    }
    
                    foreach (var severity in args)
                    {
                        channel.QueueBind(queue: queueName,
                                          exchange: "direct_logs",
                                          routingKey: severity);
                    }
    
                    Console.WriteLine(" [*] Waiting for messages.");
    
                    var consumer = new EventingBasicConsumer(channel);
                    consumer.Received += (model, ea) =>
                    {
                        var body = ea.Body;
                        var message = Encoding.UTF8.GetString(body);
                        var routingKey = ea.RoutingKey;
                        Console.WriteLine(" [x] Received '{0}':'{1}'",
                                          routingKey, message);
                    };
                    channel.BasicConsume(queue: queueName,
                                         autoAck: true,
                                         consumer: consumer);
    
                    Console.WriteLine(" Press [enter] to exit.");
                    Console.ReadLine();
                }
            }

    Topic_Publish:

    public static void Main(string[] args)
            {
                var factory = new ConnectionFactory() { HostName = "your host name", UserName = "wc", Password = "wc" };
                using (var connection = factory.CreateConnection())
                using (var channel = connection.CreateModel())
                {
                    channel.ExchangeDeclare(exchange: "topic_logs",
                                            type: "topic");
    
                    var routingKey = (args.Length > 0) ? args[0] : "anonymous.info";
                    var message = (args.Length > 1)
                                  ? string.Join(" ", args.Skip(1).ToArray())
                                  : "Hello World!";
                    var body = Encoding.UTF8.GetBytes(message);
                    channel.BasicPublish(exchange: "topic_logs",
                                         routingKey: routingKey,
                                         basicProperties: null,
                                         body: body);
                    Console.WriteLine(" [x] Sent '{0}':'{1}'", routingKey, message);
                }
            }

    Topic_Subscribe:

            public static void Main(string[] args)
            {
                var factory = new ConnectionFactory() { HostName = "your host name", UserName = "wc", Password = "wc" };
                using (var connection = factory.CreateConnection())
                using (var channel = connection.CreateModel())
                {
                    channel.ExchangeDeclare(exchange: "topic_logs", type: "topic");
                    var queueName = channel.QueueDeclare().QueueName;
                    args = new string[1] {
                        "anonymous.*"
                    };
                    if (args.Length < 1)
                    {
                        Console.Error.WriteLine("Usage: {0} [binding_key...]",
                                                Environment.GetCommandLineArgs()[0]);
                        Console.WriteLine(" Press [enter] to exit.");
                        Console.ReadLine();
                        Environment.ExitCode = 1;
                        return;
                    }
    
                    foreach (var bindingKey in args)
                    {
                        channel.QueueBind(queue: queueName,
                                          exchange: "topic_logs",
                                          routingKey: bindingKey);
                    }
    
                    Console.WriteLine(" [*] Waiting for messages. To exit press CTRL+C");
    
                    var consumer = new EventingBasicConsumer(channel);
                    consumer.Received += (model, ea) =>
                    {
                        var body = ea.Body;
                        var message = Encoding.UTF8.GetString(body);
                        var routingKey = ea.RoutingKey;
                        Console.WriteLine(" [x] Received '{0}':'{1}'",
                                          routingKey,
                                          message);
                    };
                    channel.BasicConsume(queue: queueName,
                                         autoAck: true,
                                         consumer: consumer);
    
                    Console.WriteLine(" Press [enter] to exit.");
                    Console.ReadLine();
                }
            }
  • 相关阅读:
    29. LDAP Authentication(LDAP身份验证)
    28. Pre-Authentication Scenarios(预认证场景)
    27. Domain Object Security (ACLs)(域对象安全)
    26. Expression-Based Access Control(基于表达式的访问控制)
    24. Authorization Architecture(授权架构)
    Part V. Authorization(授权)
    23. WebSocket Security(网络套接字安全)
    springmvc中使用文件下载功能
    springmvc中使用文件上传功能
    springmvc中ModelAttribute注解应用在参数中
  • 原文地址:https://www.cnblogs.com/weichao975/p/8080770.html
Copyright © 2011-2022 走看看