zoukankan      html  css  js  c++  java
  • C# RabbitMQ 基本使用

    public class RabbitMQHelper
        {
            ConnectionFactory factory = null;
            IConnection connection = null;
            IModel channel = null;
            public RabbitMQHelper(string host, string username, string password)
            {
                factory = new ConnectionFactory()
                {
                    HostName = host,
                    UserName = username,
                    Password = password
                };
            }
            public RabbitMQHelper()
            {
                factory = new ConnectionFactory()
                {
                    HostName = "localhost",
                    UserName = "Jason",
                    Password = "hensuiyi"
                };
                connection = factory.CreateConnection();
                channel = connection.CreateModel();
            }
            const string queueName = "my_queue";
            const string exchangeName = "my_exchange";
            const string routeName = "my_route";
    
            /// <summary>
            /// 接收消息 执行回调
            /// </summary>
            /// <param name="callback"></param>
            public void Receive(Action<string> callback)
            {
                channel.ExchangeDeclare(exchangeName, ExchangeType.Direct, true, false, null);
    
                channel.QueueDeclare(queueName, true, false, false, null);
    
                channel.QueueBind(queueName, exchangeName, routeName, null);
    
                channel.BasicQos(prefetchSize: 0, prefetchCount: 1, global: false);
    
                EventingBasicConsumer consumer = new EventingBasicConsumer(channel);
                consumer.Received += (model, ea) =>
                {
                    ReadOnlyMemory<byte> body = ea.Body;
                    var message = System.Text.Encoding.UTF8.GetString(body.ToArray());
                    callback(message);
                    channel.BasicAck(deliveryTag: ea.DeliveryTag, multiple: false);
                };
                channel.BasicConsume(queueName, autoAck: false, consumer: consumer);
            }
    
            public void Send(string content)
            {
                channel.ExchangeDeclare(exchangeName, ExchangeType.Direct, true, false, null);
    
                channel.QueueDeclare(queueName, true, false, false, null);
    
                channel.QueueBind(queueName, exchangeName, routeName, null);
    
                var properties = channel.CreateBasicProperties();
                properties.Persistent = true;
                properties.DeliveryMode = 1;
                byte[] body = Encoding.UTF8.GetBytes(content);
                //开始发送
                channel.BasicPublish(exchangeName, routeName, properties, body);
            }
        }
    View Code

    关于 Exchange Route Queue 的关系: https://www.cnblogs.com/linkenpark/p/5393666.html

  • 相关阅读:
    解决ffmpeg打开流各种超时问题
    ffmpeg函数使用
    如何从AVFrame::data【0】里获取RGB24数据和YUYV422数据
    ffmpeg取rtsp流时av_read_frame阻塞的解决办法
    FFMPEG实时解码网络视频流(回调方式)
    JavaScript 演练(7). 赋值与引用
    JavaScript 演练(5). 模拟类
    曾经对 TMemoryStream.Memory 错误的理解
    JavaScript 演练(10). 谁的 this ?
    JavaScript 演练(6). 函数的定义与自执行
  • 原文地址:https://www.cnblogs.com/Jason1019/p/12809465.html
Copyright © 2011-2022 走看看