zoukankan      html  css  js  c++  java
  • Raiitmq分布式消息队列分发机制(c#)

    切身体会到消息队列的好用,rabiitmq采用排队消费,数据会及时传到rabiitmq server上

    下面我们来定义生产者一号

    public static void Main(string[] args)
    {
    var factory = new ConnectionFactory();
    factory.HostName = "localhost";//RabbitMQ服务在本地运行
    factory.UserName = "guest";//用户名
    factory.Password = "guest";//密码
    using (var connection = factory.CreateConnection())
    {
    using (var channel = connection.CreateModel())
    {
    channel.QueueDeclare("hello rabiitmq", true, false, false, null);//创建一个名称为hello的消息队列
    //int prefetchCount = 1;
    
    //每个消费者发送确认信号之前,消息队列不发送下一个消息过来,一次只处理一个消息 
    //限制发给同一个消费者不得超过1条消息 
    channel.BasicQos(0, 1, false);
    
    // 发送的消息 
    for (int i = 0; i < 50; i++)
    {
    String message = "生产者一号生产消息" + i;
    // 往队列中发出一条消息 
    channel.BasicPublish("", "hello rabiitmq", null, Encoding.UTF8.GetBytes(message));
    Console.WriteLine("队列生产 '" + message + "次'");
    Thread.Sleep(i * 10);
    }
    // 关闭频道和连接 
    channel.Close();
    connection.Close();
    
    
    }
    }
    Console.ReadKey();

    下面我们来定义生产者二号

    public static void Main(string[] args)
    {
    var factory = new ConnectionFactory();
    factory.HostName = "localhost";//RabbitMQ服务在本地运行
    factory.UserName = "guest";//用户名
    factory.Password = "guest";//密码
    using (var connection = factory.CreateConnection())
    {
    using (var channel = connection.CreateModel())
    {
    channel.QueueDeclare("hello rabiitmq", true, false, false, null);//创建一个名称为hello的消息队列
    //int prefetchCount = 1;
    
    //每个消费者发送确认信号之前,消息队列不发送下一个消息过来,一次只处理一个消息 
    //限制发给同一个消费者不得超过1条消息 
    channel.BasicQos(0, 1, false);
    
    // 发送的消息 
    for (int i = 0; i < 50; i++)
    {
    String message = "生产者二号生产消息" + i;
    // 往队列中发出一条消息 
    channel.BasicPublish("", "hello rabiitmq", null, Encoding.UTF8.GetBytes(message));
    Console.WriteLine("队列生产 '" + message + "次'");
    Thread.Sleep(i * 20);
    }
    // 关闭频道和连接 
    channel.Close();
    connection.Close();
    
    
    }
    }
    Console.ReadKey();

    下面我们来定义消费者

    public static void Main(string[] args)
    {
    var factory = new ConnectionFactory();
    factory.HostName = "localhost";
    factory.UserName = "guest";
    factory.Password = "guest";
    using (var connection = factory.CreateConnection())
    {
    using (var channel = connection.CreateModel())
    {
    channel.QueueDeclare("hello rabiitmq", true, false, false, null);
    channel.BasicQos(0, 1, false);
    
    var consumer = new QueueingBasicConsumer(channel);
    channel.BasicConsume("hello rabiitmq", false, consumer);
    
    while (true)
    {
    var ea = (BasicDeliverEventArgs)consumer.Queue.Dequeue();
    
    var body = ea.Body;
    var message = Encoding.UTF8.GetString(body);
    
    int dots = message.Split('.').Length - 1;
    Thread.Sleep(dots * 1000);
    
    Console.WriteLine("消费者成功接收消息 {0}", message);
    Console.WriteLine("End");
    
    channel.BasicAck(ea.DeliveryTag, false);
    }
    
    Boolean autoAck = false; //手动确认消息
    channel.BasicConsume("hello rabiitmq", autoAck, consumer);
    
    
    }
    }
    }

    分别执行后

    自己记录一下,慢慢发现编程乐趣。

  • 相关阅读:
    margin:0 auto是什么意思
    CSS border-collapse 属性
    CSS-水平和垂直居中
    jQuery 事件
    移动端Html5控制布局
    CSS :root 测试
    SQL 读取XML到Datatable
    微信小程序 table 简单测试
    微信小程序 JS 获取View 和 屏幕相关属性(高度、宽度等等)
    JavaScript(正则表达式一)
  • 原文地址:https://www.cnblogs.com/tian-yi/p/9339926.html
Copyright © 2011-2022 走看看