RabbitMQ(dotnet基本使用
前言
RabbitMQ环境环境搭建及基本配置,在此不讨论。网上一大堆。
NET环境下,Rabbit库可以在官网或NUGET上查找得到。
生产者
static void Main(string[] args)
{
var factory = new ConnectionFactory();//连接工厂
factory.HostName = "127.0.0.1";//地址
factory.UserName = "Test";//登录名
factory.Password = "t123456!";//密码 using (var connection = factory.CreateConnection())//创建连接
{
using (var channel = connection.CreateModel())//创建通道
{
//创建队列,第二个参数bool:是否队列持久化
channel.QueueDeclare(
queue: "test", //消息队列名称
durable: false,//消息队列是否持久化
exclusive: false,//消息队列是否被本次连接connection独享。(本次连接
//connection创建的信道可以共用).排外的queue在当前连接被断开的时候会
//自动消失(清除)无论是否设置了持久化.
autoDelete: false,//消息队列是否自动删除。也就是说queue会清理自己,但
是是在最后一个connection断开的时候。
arguments: null);//参数对 var properties = channel.CreateBasicProperties();//可以为null
properties.DeliveryMode = ;//多个消费工作队列时,设置此属性
properties.SetPersistent(true);//消息持久化 string message = "Hello World";
var body = Encoding.UTF8.GetBytes(message);
//发布消息
//第一个参数:交换器,空默认为direct
//第二个参数:direct时,为队列名
//第三个参数:通道属性,可以是BasicProperties,也可以是属性接口
//第四个参数:消息正文
channel.BasicPublish("", "hello", properties, body);
Console.WriteLine(" set {0}", message);
}
}
}
消费者
static void Main(string[] args)
{
var factory = new ConnectionFactory();//连接工厂
factory.HostName = "127.0.0.1";//地址
factory.UserName = "Test";//登录名
factory.Password = "t123456!";//密码 using (var connection = factory.CreateConnection())//创建连接
{
using (var channel = connection.CreateModel())//创建通道
{
//创建队列,第二个参数bool:是否队列持久化
channel.QueueDeclare(
queue: "test", //消息队列名称
durable: false,//消息队列是否持久化
exclusive: false,//消息队列是否被本次连接connection独享。(本次连接
//connection创建的信道可以共用).排外的queue在当前连接被断开的时候会
//自动消失(清除)无论是否设置了持久化.
autoDelete: false,//消息队列是否自动删除。也就是说queue会清理自己,但
是是在最后一个connection断开的时候。
arguments: null);//参数对 //第一种接收方式:循环接收方式
var consumer = new QueueingBasicConsumer(channel);//消费者实例
channel.BasicConsume(
queue: "Test", //队列名称
autoAck: false, //是否开启收到消息自动回复
consumer: consumer//消费者
);
//多个消费者确宝公平,设置同一时间一个消费只能接收一个消息;此方法慎用
channel.BasicQos(, , false);
while (true)
{
//队列消息对象
var ea = (BasicDeliverEventArgs)consumer.Queue.Dequeue();
var body = ea.Body;
var message = Encoding.UTF8.GetString(body);
//设置睡眠时间,可模拟工作队列多个消息者模式,自行决定
Thread.Sleep(* );
//假如,前面未设置自动回复,则可以手动;
//响应给RabbitMQ服务:收到并处理了消息。
channel.BasicAck(ea.DeliveryTag, false);
//遇到无法处理的消息,拒绝且此消息是否放回队列中,发送给其他消费者
channel.BasicReject(ea.DeliveryTag, false);
Console.WriteLine("Received {0}", message);
Console.WriteLine("Done");
}
//第二种接收方式:事件方式
//实例化一个事件型消费者
var consumer = new EventingBasicConsumer(channel);
//订阅消费者接收消息的事件
consumer.Received += (model, ea) =>
{
//获取并解析数据
var body = ea.Body;
var message = Encoding.UTF8.GetString(body);
//响应给RabbitMQ服务:收到并处理了消息。
channel.BasicAck(ea.DeliveryTag, false);
//遇到无法处理的消息,拒绝且此消息是否放回队列中,发送给其他消费者
channel.BasicReject(ea.DeliveryTag, false);
Console.WriteLine($"收到: {message}");
};
}
}
}
RabbitMQ(dotnet基本使用的更多相关文章
- .NET 2.0 参考源码索引
http://www.projky.com/dotnet/2.0/Microsoft/CSharp/csharpcodeprovider.cs.htmlhttp://www.projky.com/do ...
- rabbitmq, windows/linux, c/c++/node.js/golang/dotnet
官网:http://www.rabbitmq.com/ zeromq 相当于 message backbone,而rabbitmq相当于message broker.有的应用系统中,二者并存. (1) ...
- DotNet Core中使用RabbitMQ
上一篇随笔记录到RabbitMQ的安装,安装完成,我们就开始使用吧. RabbitMQ简介 AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协 ...
- Dapr Pub/Sub 集成 RabbitMQ 、Golang、Java、DotNet Core
前置条件: <Dapr运用> <Dapr 运用之 Java gRPC 调用篇> <Dapr 运用之集成 Asp.Net Core Grpc 调用篇> 搭建 Rabb ...
- dotnet core use RabbitMQ
安装RabbitMQ 自从使用了Docker之后,发现Docker真的是比虚拟机好用啊, 因此我这里在Docker里面创建一个RabbitMQ容器. 这里注意获取镜像的时候要获取management版 ...
- DotNet 资源大全中文版(Awesome最新版)
Awesome系列的.Net资源整理.awesome-dotnet是由quozd发起和维护.内容包括:编译器.压缩.应用框架.应用模板.加密.数据库.反编译.IDE.日志.风格指南等. 算法与数据结构 ...
- [转]如何循序渐进向dotnet架构师发展
微软的DotNet开发绝对是属于那种入门容易提高难的技术.而要能够成为DotNet架构师没有三年或更长时间的编码积累基本上是不可能的.特别是在大 型软件项目中,架构师是项目核心成员,承上启下,因此RU ...
- RabbitMQ学习系列(三): C# 如何使用 RabbitMQ
上一篇已经讲了Rabbitmq如何在Windows平台安装,还不了解如何安装的朋友,请看我前面几篇文章:RabbitMQ学习系列一:windows下安装RabbitMQ服务 , 今天就来聊聊 C# 实 ...
- 在C#中使用消息队列RabbitMQ
1.什么是RabbitMQ.详见 http://www.rabbitmq.com/. 作用就是提高系统的并发性,将一些不需要及时响应客户端且占用较多资源的操作,放入队列,再由另外一个线程,去异步处理这 ...
随机推荐
- Java实现 神犇的悲惨一生
[问题描述] 传说中有位神犇,因其一贯低调,所以人们连他活了多少岁都不知道. 好在XXXX文献上有段关于他生平细节的文字:神犇一生中, 幼年占了1/6,又过了1/12的青春期,又谈了1/6的恋爱后结婚 ...
- 第七届蓝桥杯JavaB组国(决)赛部分真题
解题代码部分来自网友,如果有不对的地方,欢迎各位大佬评论 题目1.愤怒小鸟 题目描述 X星球愤怒的小鸟喜欢撞火车! 一根平直的铁轨上两火车间相距 1000 米 两火车 (不妨称A和B) 以时速 10米 ...
- java实现第七届蓝桥杯有奖竞猜
有奖竞猜 题目描述 小明很喜欢猜谜语. 最近,他被邀请参加了X星球的猜谜活动. 每位选手开始的时候都被发给777个电子币. 规则是:猜对了,手里的电子币数目翻倍, 猜错了,扣除555个电子币, 扣完为 ...
- 【CSS】电脑、移动端公用样式
电脑端: /* Public */ @charset "utf-8"; html, body, div, p, ul, ol, li, dl, dt, dd, h1, h2, h3 ...
- linux下使用tcpdump抓包分析tcp的三次握手
首先贴上tcp 三次握手的原理图服务器开启ftp服务并执行tcpdump抓包服务器:192.168.3.14 ftp服务客户端:192.168.3.100 服务器执行以下命令,客户端访问服务器ftp: ...
- 小师妹学JavaIO之:文件系统和WatchService
目录 简介 监控的痛点 WatchService和文件系统 WatchSerice的使用和实现本质 总结 简介 小师妹这次遇到了监控文件变化的问题,F师兄给小师妹介绍了JDK7 nio中引入的Watc ...
- [xDebug]Xdebug和Sublime调试PHP代码
安装xdebug 省略... 配置sublime 要调试某一个项目,首先得把这个项目在sublime下保存成一个project sublime->project->save project ...
- git添加所有新文件
git add -A 提交所有变化 git add -u 提交被修改(modified)和被删除(deleted)文件,不包括新文件(new) git add . 提交新文件(new)和被修改(mod ...
- Spring Boot 在启动时进行配置文件加解密
Spring Boot Application 事件和监听器 寻找到application.yml的读取的操作. 从spring.factories 中查看到 # Application Listen ...
- postgresql中进行备份和回滚的常用sql语句小结
最近在项目中需要对已有的部分数据库数据进行备份,通过搜索和实践,把常用的sql以及过程记录如下, 1.常用的备份数据库思路,把需要备份的数据放到一个新表中,这个新表的记录与需要备份的表完全一样,然后备 ...