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);
    
    
    }
    }
    }

    分别执行后

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

  • 相关阅读:
    面试6 在c#中如何声明一个类不能被继承
    面试5 如何理解静态变量,局部变量,全局变量
    面试4 你在什么情况下会用到虚方法?它与接口有什么不同
    面试3 不用系统自带的方法将字符串类型123456转换为值类型
    面试2 递归的算法求1,1,2,3,5,8.......的第30位数是多少,然后求这些数的和.
    面试1 SQL SERVER 查询第20行到30之间的数据
    ubuntu安装nginx
    ubuntu上使用ufw配置管理防火墙
    ubuntu上安装docker
    ubuntu上使用vim编辑文本内容
  • 原文地址:https://www.cnblogs.com/tian-yi/p/9339926.html
Copyright © 2011-2022 走看看