zoukankan      html  css  js  c++  java
  • .Net使用RabbitMQ

    网上参考大神们的博客,自己做了一个RabbitMQ即时发消息的Demo。

    1.使用VS的NuGet安装包管理工具安装RabbitMQ.Client:

    2.生产者端代码:

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Threading.Tasks;
     6 using RabbitMQ.Client;
     7 
     8 namespace RabbitMQ.Producter
     9 {
    10     class Program
    11     {
    12         /// <summary>
    13         /// 连接配置
    14         /// </summary>
    15         private static readonly ConnectionFactory rabbitMqFactory = new ConnectionFactory()
    16         {
    17             HostName="localhost",
    18             UserName = "guest",
    19             Password = "guest",
    20             Port = 5672,
    21             //VirtualHost = "JentVirtualHost"
    22         };
    23         /// <summary>
    24         /// 路由名称
    25         /// </summary>
    26         const string ExchangeName = "Jent.Exchange";
    27         /// <summary>
    28         /// 队列名称
    29         /// </summary>
    30         const string QueueName = "Jent.Queue";
    31         static void Main(string[] args)
    32         {
    33             DirectExchangeSendMsg();
    34             Console.WriteLine("按任意键退出程序!");
    35             Console.ReadKey();
    36         }
    37         /// <summary>
    38         /// 单点精确路由模式
    39         /// </summary>
    40         private static void DirectExchangeSendMsg()
    41         {
    42             using (IConnection conn = rabbitMqFactory.CreateConnection())
    43             {
    44                 using (IModel channel = conn.CreateModel())
    45                 {
    46                     channel.ExchangeDeclare(ExchangeName, "direct", durable: true, autoDelete: false, arguments: null);
    47                     channel.QueueDeclare(QueueName, durable: true, exclusive: false, autoDelete: false, arguments: null);
    48                     channel.QueueBind(QueueName, ExchangeName, routingKey: QueueName);
    49 
    50                     var props = channel.CreateBasicProperties();
    51                     props.Persistent = true;
    52                     Console.WriteLine("请输入需要发送的消息:");
    53                     string vadata = Console.ReadLine();
    54                     while (vadata != "exit")
    55                     {
    56                         var msgBody = Encoding.UTF8.GetBytes(vadata);
    57                         channel.BasicPublish(exchange: ExchangeName, routingKey: QueueName, basicProperties: props, body: msgBody);
    58                         Console.WriteLine(string.Format("发送时间:{0},发送完毕,输入exit退出消息发送", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")));
    59                         vadata = Console.ReadLine();
    60                     }
    61                 }
    62             }
    63         }
    64     }
    65 }

    3.消费者端代码:

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Threading.Tasks;
     6 using RabbitMQ.Client;
     7 
     8 namespace RabbitMQ.Consumer
     9 {
    10     class Program
    11     {
    12         /// <summary>
    13         /// 连接配置
    14         /// </summary>
    15         private static readonly ConnectionFactory rabbitMqFactory = new ConnectionFactory()
    16         {
    17             HostName = "127.0.0.1",
    18             UserName = "guest",
    19             Password = "guest",
    20             Port = 5672,
    21             //VirtualHost = "JentVirtualHost"
    22         };
    23         /// <summary>
    24         /// 路由名称
    25         /// </summary>
    26         const string ExchangeName = "Jent.Exchange";
    27         /// <summary>
    28         /// 队列名称
    29         /// </summary>
    30         const string QueueName = "Jent.Queue";
    31 
    32         static void Main(string[] args)
    33         {
    34             DirectAcceptExchange();
    35 
    36             Console.WriteLine("输入任意值退出程序!");
    37             Console.ReadKey();
    38         }
    39 
    40         private static void DirectAcceptExchange()
    41         {
    42             using (IConnection conn = rabbitMqFactory.CreateConnection())
    43             {
    44                 using (IModel channel = conn.CreateModel())
    45                 {
    46                     channel.ExchangeDeclare(ExchangeName, "direct", durable: true, autoDelete: false, arguments: null);
    47                     channel.QueueDeclare(QueueName, durable: true, exclusive: false, autoDelete: false, arguments: null);
    48                     channel.QueueBind(QueueName, ExchangeName, routingKey: QueueName);
    49 
    50                     while (true)
    51                     {
    52                         BasicGetResult msgResponse = channel.BasicGet(QueueName, autoAck: false);
    53                         if (msgResponse != null)
    54                         {
    55                             var msgBody = Encoding.UTF8.GetString(msgResponse.Body);
    56                             Console.WriteLine(string.Format("接收时间:{0},消息内容:{1}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), msgBody));
    57                         }
    58                         //System.Threading.Thread.Sleep(TimeSpan.FromSeconds(1));
    59                     }
    60                 }
    61             }
    62         }
    63     }
    64 }

    4.程序结果:

    注:在第一步之前,你需要安装RabbitMQ客户端,可从http://www.rabbitmq.com/download.html下载,

            但是RabbitMQ又是依赖于Erlang OTP平台,所以,安装RabbitMQ之前,需要先从http://www.erlang.org/download.html下载安装erlang

            关于这部分的内容,推荐阅读:http://www.cnblogs.com/5ishare/p/6716142.html

      此Demo只是‘direct’方式的消息发送接收方式。

    好记性不如烂笔头!
  • 相关阅读:
    Python-数据结构
    优化算法-BFGS
    Sparse AutoEncoder简介
    Sparse Filtering简介
    基于受限玻尔兹曼机(RBM)的协同过滤
    Grep学习笔记
    【深度学习篇】--Windows 64下tensorflow-gpu安装到应用
    【自然语言处理篇】--聊天机器人从初始到应用
    【深度学习】--DCGAN从入门到实例应用
    【深度学习】--GAN从入门到初始
  • 原文地址:https://www.cnblogs.com/JentZhang/p/9283964.html
Copyright © 2011-2022 走看看