.NET 使用 RabbitMQ 图文简介

 前言

最近项目要使用RabbitMQ,园里里面已经有很多优秀的文章,Rabbitmq官网也有.net实例。这里我尝试下图文并茂之形式记录下使用的过程。

安装

RabbitMQ是建立在erlang OTP平台下,因此在windows下需要下载并安装以下两个组件:

1. Erlang OTP For windows

2. Rabbit MQ Windows Service Install

RabbitMQ一般还需要安装其基于http的管理平台插件,这个平台插件便于我们查看和管理RabbitMQ,可以通过命令行将其启用:

rabbitmq-plugins enable  rabbitmq_management

之后就可以通过 http://localhost:15672/ 登录,账号的密码和密码可以使用默认的guest/guest,登录之后的页面:

RabbitMq 使用

下图就是具体的使用流程

其方框中就是Rabbitmq的message broker,我们将上图按上下方式来解释:

1. 信息发送端将消息(message)发送到exchange

2. exchange接受消息之后,负责将其路由到具体的队列中

3. Bindings负责连接exchange和队列(queue)

4. 消息到达队列(queue),然后等待被消息接收端处理

5. 消息接收端处理消息

初始化RabbitMQ

现在我们用代码来demo流程,首先在nuget上获取RabbitMQ.Client:

然后创建图中2,3,4步需要的exchange,bingding,queue

string exchangeName = "test.exchange";
string queueName = "test1.queue";
string otherQueueName = "test2.queue";
using (IConnection conn = rabbitMqFactory.CreateConnection())

using (IModel channel = conn.CreateModel()) {    //2 定义一个exchangechannel.ExchangeDeclare(exchangeName, "direct", durable: true, autoDelete: false, arguments: null);    //4 定义两个queuechannel.QueueDeclare(queueName, durable: true, exclusive: false, autoDelete: false, arguments: null);channel.QueueDeclare(otherQueueName, durable: true, exclusive: false, autoDelete: false, arguments: null);    //3 定义exchange到queue的binding    channel.QueueBind(queueName, exchangeName, routingKey: queueName);channel.QueueBind(otherQueueName, exchangeName, routingKey: otherQueueName); }


创建成功之后可以在rabbit的管理平台查看:

发送消息

从图上我们得知消息是发送到rabbitmq的exchange,但可以传一些消息属性如routingkey,一下代码中我们将队列的名字作为routingkey传进去:

string exchangeName = "test.exchange";
string queueName = "test1.queue";
string otherQueueName = "test2.queue";
using (IConnection conn = rabbitMqFactory.CreateConnection())
using (IModel channel = conn.CreateModel)) {  
   
var props = channel.CreateBasicProperties();props.Persistent = true;  
   
var msgBody = Encoding.UTF8.GetBytes("Hello, World!");    
/ /1. 发送消息到exchange ,但加上routingkey    channel.BasicPublish(exchangeName, routingKey: queueName, basicProperties: props, body: msgBody);channel.BasicPublish(exchangeName, routingKey: otherQueueName, basicProperties: props, body: msgBody); }

发送之后可以rabbitmq上看到:

 

接收消息

string queueName = "test1.queue";

string otherQueueName = "test2.queue";
using (IConnection conn = rabbitMqFactory.CreateConnection())
using (IModel channel = conn.CreateModel()) {    //5. 从test1.queue 队列获取消息BasicGetResult msgResponse = channel.BasicGet(queueName, noAck: true);  
 
string msgBody = Encoding.UTF8.GetString(msgResponse.Body);    
//5. 从test2.queue 队列获取消息msgResponse = channel.BasicGet(otherQueueName, noAck: true);msgBody = Encoding.UTF8.GetString(msgResponse.Body);}

 总结

通过以上的简述我们对rabbitmq的使用就有了大概的了解

相关文章: 

  • .Net使用RabbitMQ详解

  • 体验Rabbitmq强大的【优先级队列】之轻松面对现实业务场景

  • RabbitMQ消息队列应用

  • RabbitMQ 高可用集群搭建及电商平台使用经验总结

原文地址:http://www.cnblogs.com/julyluo/p/6262553.html


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/327221.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Springboot+MyBatis-plus+postgresSQL 的整合

https://blog.csdn.net/xuxiannian/article/details/99625085 SpringbootMyBatis-pluspostgresSQL 的整合 禛陌 2019-08-15 12:20:10 6752 收藏 7 分类专栏: 技术相关 文章标签: SpringbootMyBatis-pluspostgresSQL 版权 磨叨一下 MyBatis-plus 请…

使用Senparc.Weixin.WxOpen开发高可用的微信小程序

Senparc.Weixin SDK介绍 Senparc.Weixin SDk是目前.net平台上使用率最高的微信SDK,除硬件平台暂未发布以外覆盖了所有微信平台模块,自2013年免费开源起已经持续更新了4年,是GitHub上目前Star和Fork数最多的中国C#开源项目。 目前大多数模块都…

Java中的事务——JDBC事务和JTA事务

转载自 Java中的事务——JDBC事务和JTA事务 我的博客中曾经关于事务有过很多讨论,之前的事务介绍基本都是数据库层面的事务,本文来介绍一下J2EE中和事务相关的内容,在阅读本文之前,希望读者对分布式有一定的了解。 关于事务的基础…

IDEA使用笔记(八)——自动生成 serialVersionUID 的设置

Ihttps://www.cnblogs.com/godtrue/p/7674487.html https://www.cnblogs.com/godtrue/p/7674487.html DEA使用笔记(八)——自动生成 serialVersionUID 的设置 这个设置比较简单,也有一些博文已经写到了,为什么我还要写哪&#…

从事件和DDD入手来构建微服务

领域驱动设计(Domain-Driven Design,DDD)是一项很伟大的技术,它拉近了设计与程序实际所服务的领域,但是通常我们会关注结构,从而太早地做出决策,这并非DDD的本意。相反,在领域中&…

JTA 深度历险 - 原理与实现

转载自 JTA 深度历险 - 原理与实现 利用 JTA 处理事务 什么是事务处理 事务是计算机应用中不可或缺的组件模型,它保证了用户操作的原子性 ( Atomicity )、一致性 ( Consistency )、隔离性 ( Isolation ) 和持久性 ( Durabilily )。关于事务最经典的示例莫过于信…

为了支持AOP的编程模式,我为.NET Core写了一个轻量级的Interception框架[开源]

ASP.NET Core具有一个以ServiceCollection和ServiceProvider为核心的依赖注入框架,虽然这只是一个很轻量级的框架,但是在大部分情况下能够满足我们的需要。不过我觉得它最缺乏的是针对AOP的支持,虽然这个依赖注入框架提供了扩展点使我们可以很…

装箱VS拆箱

我们一般将“基本数据类型转换成包装类”的过程叫做装箱,将“包装类转换成基本数据类型”的过程叫做拆箱。 装箱可以分为手动装箱和自动装箱: 拆箱也可以分为手动拆箱和自动拆箱:

事务模型与分布式事务总结思考

转载自 事务模型与分布式事务总结思考 1. 介绍 之前了解过一些分布式事务处理的思想,包括MVCC、TCC等。但是对具体实现的规范和约束还不够理解清晰。本文从事务模型分类来讨论常见的事务模型。事务模型的含义,应该指的是我们如何去使用可控制事务。 首…

我的这10年——从机械绘图 到 炼油 到 微软MVP 的华丽转身

年底了,各种总结计划满天飞,有空的时候我也一直在思考这么多年,是怎么过来的。也曾经很迷茫,希望经验和经历能给大家一点带来一点正能量的东西。10年很长,10年前说实话我没有思考过现在的样子,但10年前的日…

基本类型和字符串互相转换

将基本数据类型转换成字符串 将字符串转换成基本数据类型

C#如何使用ES

Elasticsearch简介 Elasticsearch (ES)是一个基于 Lucene 的开源搜索引擎,它不但稳定、可靠、快速,而且也具有良好的水平扩展能力,是专门为分布式环境设计的。 Elasticsearch是什么 Elasticsearch是一个基于Apache Luc…

springboot中配置mybatis连接postgresql

https://blog.csdn.net/y_qc_lookup/article/details/80178545 springboot中配置mybatis连接postgresql 置顶 Dylans 2018-05-03 15:49:46 41415 收藏 8 分类专栏: java 文章标签: springboot mybatis postgresql xml 版权 最近在使用springboot用于…

CoreCLR源码探索(二) new是什么

前一篇我们看到了CoreCLR中对Object的定义,这一篇我们将会看CoreCLR中对new的定义和处理new对于.Net程序员们来说同样是耳熟能详的关键词,我们每天都会用到new,然而new究竟是什么? 因为篇幅限制和避免难度跳的太高,这一…

asp.net core 认证及简单集群

众所周知,在Asp.net WebAPI中,认证是通过AuthenticationFilter过滤器实现的,我们通常的做法是自定义AuthenticationFilter,实现认证逻辑,认证通过,继续管道处理,认证失败,直接返回认…

Could not open ServletContext resource [/WEB-INF/springmvc-servlet.xml]【解决方案】

第一次自学springmvc的时候&#xff0c;老是报错Could not open ServletContext resource [/WEB-INF/springmvc-servlet.xml]&#xff0c;郁闷的不要不要的。按照配置规则重新检查了一遍&#xff0c;没看出问题来&#xff0c;上网搜了一下说在web.xml里面加入: <servlet>…