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实现蓝桥杯 最短路
问题描述 给定一个n个顶点,m条边的有向图(其中某些边权可能为负,但保证没有负环).请你计算从1号点到其他点的最短路(顶点从1到n编号). 输入格式 第一行两个整数n, m. 接下来的m行,每行有三个 ...
- Java实现蓝桥杯十六进制转八进制
基础练习 十六进制转八进制 时间限制:1.0s 内存限制:512.0MB 提交此题 锦囊1 锦囊2 问题描述 给定n个十六进制正整数,输出它们对应的八进制数. 输入格式 输入的第一行为一个正整数n ( ...
- Java实现蓝桥杯打印图形
标题:打印图形 如下的程序会在控制台绘制分形图(就是整体与局部自相似的图形). 当n=1,2,3的时候,输出如下: 请仔细分析程序,并填写划线部分缺少的代码. n=1时: o ooo o n=2时: ...
- CSDN账号被冻结了怎么办
CSDN可能因为你的博客里有一些网站链接给你判断为恶意推广广告,冻结, 或者和我一样,在评论区刷屏被冻结, 联系客服即可,向客服提供你的绑定邮箱或绑定手机号,或博客id,客服会给你解冻 PS: 找不到 ...
- ant构建Jmeter脚本的build文件配置(build.xml)
使用此构建文件可自动发送邮件 代码如下: <?xml version="1.0" encoding="UTF8"?> <project na ...
- 机器学习——十大数据挖掘之一的决策树CART算法
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是机器学习专题的第23篇文章,我们今天分享的内容是十大数据挖掘算法之一的CART算法. CART算法全称是Classification ...
- idea 启动命令行的时候提示不能创建PTY
问题描述: 昨天上午,凯哥还在好好的使用idea,中午的时候,360扫描,好像要升级还是要干嘛的,没细看,然后凯哥就点击确定.结果到下午使用idea的Terminal 命令行的时候提示,如下图错误: ...
- KVM在线扩展虚拟机内存
环境介绍 在KVM下有一台虚拟机内存不够需要扩展内存.宿主机地址是192.168.1.28.我需要扩展的虚拟机是centos1708vm03. 1.登陆上宿主机查看虚拟机配置 virsh dumpxm ...
- 基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(一)
系列文章 基于 abp vNext 和 .NET Core 开发博客项目 - 使用 abp cli 搭建项目 基于 abp vNext 和 .NET Core 开发博客项目 - 给项目瘦身,让它跑起来 ...
- jetty 启动项目在pom.xml 的配置
<build> <finalName>${artifactId}</finalName> <resources> <resource> &l ...