• RabbitMQ 在.Net 中的使用


     

    RabbitMQHelper

     public static class RabbitMQHelper
        {
            // 定义 RabbitMQ 基本参数 
    
            private static string HostName = "127.0.0.1";
    
            private static int Port = 5672;
    
            private static string UserName = "admin";
    
            private static string Password = "admin";
    
            private static byte[] ToBytes(string str) => Encoding.UTF8.GetBytes(str);
    
            /// <summary>
            /// 设置交换机
            /// </summary>
            /// <param name="exchange">交换机名称</param>
            /// <param name="type">direct fanout headers topic</param>
            public static void SetExchange(string exchange, string type)
            {
                using (var channel = BuildChannel())
                {
                    channel.ExchangeDeclare(exchange, type, true, false);
                }
            }
    
    
            /// <summary>
            /// 设置队列
            /// </summary>
            /// <param name="queue">队列名称</param>
            /// <param name="exchange">交换机</param>
            public static void SetQueue(string queue, string exchange)
            {
                using (var channel = BuildChannel())
                {
                    //定义队列名称 持久化:是 
                    channel.QueueDeclare(queue, true, false, false, null);
    
                    // 绑定队列
                    channel.QueueBind(queue, exchange, queue, null);
    
                }
            }
    
            /// <summary>
            /// 设置队列
            /// </summary>
            /// <param name="queues">队列集合</param>
            /// <param name="exchange">交换机</param>
            public static void SetQueue(List<string> queues, string exchange)
            {
                using (var channel = BuildChannel())
                {
                    foreach (var queue in queues)
                    {
                        //定义队列名称 持久化:是 
                        channel.QueueDeclare(queue, true, false, false, null);
    
                        // 绑定队列
                        channel.QueueBind(queue, exchange, queue, null);
    
                    }
    
                }
            }
    
    
            /// <summary>
            /// 发布
            /// </summary>
            /// <param name="exchange">交换机</param>
            /// <param name="queue">队列</param>
            /// <param name="message">消息体</param>
            public static void Publish(string exchange, string queue, string message)
            {
                using (var channel = BuildChannel())
                {
                    channel.BasicPublish(exchange, queue, null, ToBytes(message));
                }
            }
    
    
            /// <summary>
            /// 订阅
            /// </summary>
            /// <param name="queue">队列</param>
            /// <param name="func">func</param>
            public static void Subscribe(string queue, Func<string, bool> func)
            {
                var channel = BuildChannel();
    
                //事件基本消费者
                EventingBasicConsumer consumer = new EventingBasicConsumer(channel);
    
                //接收到消息事件
                consumer.Received += (ch, ea) =>
                {
                    var message = Encoding.UTF8.GetString(ea.Body);
    
                    func.Invoke(message);
    
                        //Task.Run( () => { func.Invoke(message); });
    
                        //确认该消息已被消费
                        channel.BasicAck(ea.DeliveryTag, false);
    
                };
    
                //启动消费者 设置为手动应答消息
                channel.BasicConsume(queue, false, consumer);
    
            }
    
            private static IModel BuildChannel()
            {
                return new ConnectionFactory()
                {
                    HostName = HostName,
                    Port = Port,
                    UserName = UserName,
                    Password = Password
    
                }.CreateConnection().CreateModel();
            }
    
        }

    具体使用

    class Program
        {
            static void Main(string[] args)
            {
                //初始化交换机
                RabbitMQHelper.SetExchange("ServerDirect", "direct");
    
                // 初始化队列
                RabbitMQHelper.SetQueue("LogCenter", "ServerDirect");
                RabbitMQHelper.SetQueue("SMSCenter", "ServerDirect");
                RabbitMQHelper.SetQueue("EmailCenter", "ServerDirect");
    
                //发布消息
    
                for (int i = 0; i < 100; i++)
                {
                    RabbitMQHelper.Publish("ServerDirect", "LogCenter", "log"+i);
                }  
    
                RabbitMQHelper.Publish("ServerDirect", "SMSCenter", "sms111111111");  
    
    
                Console.ReadKey();
            }
        }
  • 相关阅读:
    (转)Python中的__init__和__new__
    PEP8
    python lstrip()函数
    python中的生成器跟迭代器
    callback
    关于0.0.0.0这个ip的疑问
    Python import中相对路径的问题
    python读取excel
    git本地管理多个密钥/账户
    词法分析之有确定、不确定自动机及其生成器
  • 原文地址:https://www.cnblogs.com/myshowtime/p/11855088.html
Copyright © 2020-2023  润新知