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

  • 相关阅读:
    jsonp 监控简陋代码
    Oracle多线程并行使用、关联与指定索引执行
    Oracle计算时间差表达式
    行查列显
    JS时间
    通过string型类名实例化一个类
    sotower1.5-LS_工作流容易出错的地方
    oracle11g ORA-12505
    华项笔记本显示颜色变黄,调整好了重启还是偏黄
    ORA-00031: session marked for kill 处理Oracle中杀不掉的锁
  • 原文地址:https://www.cnblogs.com/Jason1019/p/12809465.html
Copyright © 2011-2022 走看看