宝哥软件园

RabbitMQ详解 NET消息队列

编辑:宝哥软件园 来源:互联网 时间:2021-09-12

本文的例子分享了RabbitMQ的用法。NET消息队列供大家参考,具体内容如下

首先下载安装包。我的环境是win7 64位:去官网下载otp_win64_19.0.exe在rabbitmq-server-3.6.3.exe安装。然后开始编程:(1)创建生产者类:

类程序{ private static void main(){//建立RabbitMQ连接和通道var连接工厂=新连接工厂{hostname=' 127.0.0.1 ',port=5672,UserName='guest ',Password='guest ',Protocol=Protocols。DefaultProtocol,AutomaticRecoveryEnabled=true,//自动重新连接requested frame max=uint 32 . max value,requested heart beat=uint16.maxvalue//heartbeat超时};请尝试{使用(var connection=connection factory . create connection()){使用(var channel=connection . create model()){//创建一个新的连接。持久交换区通道。exchange Clare(' SISO exchange ',exchangetype。直接、真、假、空);//创建一个没有排他性的新的持久队列,不要自动删除channel . queuedeclare(' SISO queue ',true,false,false,null);//将队列绑定到交换区通道. queuebind ('sisoqueue ',' sisoexchange ',' optional routingkey ');//设置消息属性varproperties=channel . createbasicproperties();属性。delivery mode=2;//消息是持久的,它的存在不会受到服务器重启的影响。//要推送//发布的消息可以是任意字节数组(可以序列化),比如序列化对象、实体ID,或者只是字符串var encoding=new utf8 encoding();for(var I=0;i 10I) {var msg=string。格式('这是消息#{0}?',I 1);var msgBytes=编码。GetBytes(msg);//Rabbtmq消息模型的核心思想是生产者不直接向队列发送消息。事实上,在许多情况下,生产者不知道消息是否会被发送到队列。相反,生产者将消息发送到交换区。交换区是一件非常简单的事情。它从一端的生产者那里接收消息,并把它们推到另一端的队列中。交换区必须清楚地指示如何处理它收到的消息。放在一个队列中,放在多个队列中,或者被丢弃。这些规则可以通过交换区域的类型来定义。//可用的交换区域有:直接、主题、标题、扇出。//交换:用于接收消息生产者发送的消息,交换有直接、扇出、主题三种类型,不同类型实现不同的路由算法;//RoutingKey:是RabbitMQ实现路由分发到各个队列的规则,由Exchange结合Binging使用,将消息推送到队列中;//队列:是消息队列。您可以根据需要定义多个队列,并设置队列的属性,如消息移除、消息缓存、回调机制等。实现与消费者的沟通。频道。BasicPublish('SISOExchange ',' optionalRoutingKey ',properties,msgBytes);}频道。close();} } } catch(异常ex) { Console。WriteLine(例如。消息);}控制台。WriteLine('新闻稿!');控制台。ReadKey(真);}} (1)创建消费类:

类程序{私有静态void Main() { //建立RabbitMQ连接和通道var connectionFactory=new connectionFactory { HostName=' 127。0 .0 .1 ',端口=5672,用户名=客户,密码=客户,协议=协议。AMQP_0_9_1,请求帧最大值=UInt32 .最大值,已请求心跳=UInt16 .maxVaLue };使用(变量连接=连接工厂.CreateConnection())使用(var通道=连接.CreateModel()) { //这指示通道不预取超过一个消息频道。基本服务质量(0,1,假);//创建一个新的,持久的交换区频道ExchangeDeclare('SISOExchange ',ExchangeType).直接、真、假、空);//创建一个新的,持久的队列频道QueueDeclare('sample-queue ',true,false,false,null);//绑定队列到交换区频道QueueBind('SISOqueue ',' SISOExchange ','可选routing key ');使用(var订阅=新订阅(通道,false队列’,假的){控制台.WriteLine(“”等待消息.');定义变量编码=新的utf8编码();而(频道. IsoPen){ base cdelivereventargs eventArgs;定义变量成功=订阅。下一个(2000年,不包括事件参数);如果(成功==假)继续;var msgBytes=eventArgs .身体;定义变量消息=编码. GetString(MSgbytes);控制台WriteLine(消息);频道BasicAck(eventArgs .DeliveryTag,false);} } } } } 消费者-结果如图:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

更多资讯
游戏推荐
更多+