博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
RabbitMQ消息队列(二):"Hello, World"[转]
阅读量:5880 次
发布时间:2019-06-19

本文共 2507 字,大约阅读时间需要 8 分钟。

2. Sending

第一个program send.cs:发送Hello world 到queue。正如我们在上篇文章提到的,你程序的第9行就是建立连接,第12行就是创建channel,第14行创建名字为hello的queue。

1 using System; 2 using RabbitMQ.Client; 3 using System.Text; 4  5 class Send 6 { 7     public static void Main() 8     { 9         var factory = new ConnectionFactory() { HostName = "localhost" };10         using (var connection = factory.CreateConnection())11         {12             using (var channel = connection.CreateModel())13             {14                 channel.QueueDeclare("hello", false, false, false, null);//hello是queue的名字15                 string message = "Hello World!";16                 var body = Encoding.UTF8.GetBytes(message);17                 channel.BasicPublish("", "hello", null, body);//hello是routing key的名字18                 Console.WriteLine(" [x] Sent {0}", message);19             }20         }21     }22 }

从架构图可以看出,Producer只能发送到exchange,它是不能直接发送到queue的。

第17行:现在我们使用默认的exchange(名字是空字符)。这个默认的exchange允许我们发送给指定的queue。routing_key就是指定的queue名字。

3. Receiving

第二个program receive.cs 将从queue中获取Message并且打印到屏幕。

1 using RabbitMQ.Client; 2 using RabbitMQ.Client.Events; 3 using System; 4 using System.Text; 5  6 class Receive 7 { 8     public static void Main() 9     {10         var factory = new ConnectionFactory() { HostName = "localhost" };11         using (var connection = factory.CreateConnection())12         {13             using (var channel = connection.CreateModel())14             {15                 channel.QueueDeclare("hello", false, false, false, null);//hello是queue的名字16                 var consumer = new QueueingBasicConsumer(channel);17                 channel.BasicConsume("hello", true, consumer);//hello是queue的名字,这里可以理解为hello是routing key的名字。因为这个例子没有使用指定名称的exchange(实际上使用的是默认的exchange名字),所以queue的名字和routing key的名字是相同的。在第五篇文章中介绍如果使用了指定名称的exchange,queue name和routing key的关系与用法。18                 Console.WriteLine(" [*] Waiting for messages." + "To exit press CTRL+C");19                 while (true)20                 {21                     var ea = (BasicDeliverEventArgs)consumer.Queue.Dequeue();//阻塞22                     var body = ea.Body;23                     var message = Encoding.UTF8.GetString(body);24                     Console.WriteLine(" [x] Received {0}", message);25                 }26             }27         }28     }29 }

4. 最终运行

先运行 send.cs ,send.cs 每次运行完都会停止。注意:现在数据已经存到queue里了。在接收它receive.cs.

转:

http://www.rabbitmq.com/tutorials/tutorial-one-dotnet.html(官网)

http://blog.csdn.net/anzhsoft/article/details/19570187(翻译)

你可能感兴趣的文章
【浙大网新图灵通讯】无废话简单高效C#编码规范20100612
查看>>
实现基于组织机构的数据集权限系统的设计思路讲解【提供完整数据库设计下载】...
查看>>
docker-py execute echo无效
查看>>
Spring Boot Redis Cache应用
查看>>
Handler学习
查看>>
SQL Server 监视(Monitoring)体系架构
查看>>
SQLSERVER群集故障转移笔记
查看>>
我的友情链接
查看>>
业务相关同步机制
查看>>
DHCP服务
查看>>
C# 获得本机IP、端口等信息地址以及服务器IP信息
查看>>
HTTP请求头图片打开
查看>>
linux 安装Swagger(swagger-editor , swagger-ui)
查看>>
NTP时间服务器
查看>>
Java中JFrame的getContentPane()和setContentPane()方法使用说明
查看>>
eclipse/myeclipse 中的一些常用的快捷键
查看>>
Nginx +keepalived+tomcat 实现高可用+负载均衡
查看>>
rsync的使用
查看>>
查询Oracle剩余表空间语句+temp临时表空间使用率语句
查看>>
CCNA学习指南 第一、二章 下载
查看>>