zoukankan      html  css  js  c++  java
  • RabbitMQ 一个demo

    Code:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading;
    using System.Threading.Tasks;
    using RabbitMQ.Client;
    using RabbitMQ.Client.Events;
    using System.IO;
    
    
    namespace ConsoleDemo
    {
        class Program
        {
            static void Main(string[] args)
            {
                //step1 
                new Thread(Provider.Write).Start();
                new Thread(Provider.Write).Start();
                new Thread(Provider.Write).Start();
    
                //step2(写入不能多线程,会冲突)
                new Thread(Consumer.Read).Start();
            }
        }
    
        public class Provider
        {
            public static void Write()
            {
                var factory = new ConnectionFactory() { HostName = "localhost", UserName = "qhong", Password = "hongdada", };
                using (var connection = factory.CreateConnection())
                using (var channel = connection.CreateModel())
                {
                    channel.QueueDeclare(queue: "writeLog", durable: false, exclusive: false, autoDelete: false, arguments: null);
                    for (int i = 0; i < 1994; i++)
                    {
                        string message = i.ToString();
                        var body = Encoding.UTF8.GetBytes(message);
    
                        channel.BasicPublish(exchange: "", routingKey: "writeLog", basicProperties: null, body: body);
                        Console.WriteLine("Program Sent {0}", message);
                    }
                }
            }
        }
    
        public class Consumer
        {
            public static void Read()
            {
                var factory = new ConnectionFactory() { HostName = "localhost", UserName = "qhong", Password = "hongdada", VirtualHost = "/" };
                using (var connection = factory.CreateConnection())
                using (var channel = connection.CreateModel())
                {
                    channel.QueueDeclare(queue: "writeLog",
                                         durable: false,
                                         exclusive: false,
                                         autoDelete: false,
                                         arguments: null);
    
                    var consumer = new EventingBasicConsumer(channel);
                    consumer.Received += (model, ea) =>
                    {
                        var body = ea.Body;
                        var message = Encoding.UTF8.GetString(body);
                        ExcuateWriteFile(message);
                        Console.WriteLine(" Receiver Received {0}", message);
                    };
                    channel.BasicConsume(queue: "writeLog",
                                         noAck: true,
                                         consumer: consumer);
    
                    Console.WriteLine(" Press [enter] to exit.");
                    Console.ReadLine();
                }
            }
            public static void ExcuateWriteFile(string i)
            {
                using (FileStream fs = new FileStream(@"d:\test.txt", FileMode.Append))
                {
                    using (StreamWriter sw = new StreamWriter(fs, Encoding.Unicode))
                    {
                        sw.WriteLine(i);
                    }
                }
            }
        }
    }

    分成2步执行,第一步生产者往队列里面添加数据

    第二步,消费者读取队列里面的数据并写入文件test.txt

    http://www.cnblogs.com/ericli-ericli/p/5917018.html

    http://www.cnblogs.com/piaolingzxh/p/5448927.html

  • 相关阅读:
    js判断是否为数字
    sublime3常用插件总结
    npm run build打包后自定义动画没有执行
    css实现未知元素宽高垂直居中和水平居中的方法
    vue3.0的设计目标
    chrome 80版本以后开启了SameSite
    http以及缓存、事件循环......
    vue移动端适配就这么玩
    前端性能监控
    能解决 80% 需求的 10个 CSS动画库
  • 原文地址:https://www.cnblogs.com/hongdada/p/7049861.html
Copyright © 2011-2022 走看看