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实现除去次方数
** 除去次方数** 自然数的平方数是:1 4 9 16 25 - 自然数的立方数是:1 8 27 64 125 - 自然数的4次方数是:1 16 81 256 - - 这些数字都可以称为次方数. 1 ...
- java实现第二届蓝桥杯最小公倍数(c++)
最小公倍数. 为什么1小时有60分钟,而不是100分钟呢?这是历史上的习惯导致. 但也并非纯粹的偶然:60是个优秀的数字,它的因子比较多. 事实上,它是1至6的每个数字的倍数.即1,2,3,4,5,6 ...
- 原生js实现点击添加购物车按钮出现飞行物飞向购物车
效果演示: 思路:核心->抛物线公式 let a = -((y2-y3)*x1 - (x2-x3)*y1 + x2*y3 - x3*y2) / ((x2-x3) * (x1-x2) * (x1- ...
- LoadRunner性能测试笔试/面试题
客户交付一个性能测试项目,请阐述你的实施流程. 测试设计阶段: 1)了解被测系统的性能需求,定义测试目标和范围: 2)了解系统的技术信息,如系统架构等: 3)确定测试方案.进度安排,并制定测试计划,场 ...
- 使用PyQtGraph绘制图形(1)
首先利用numpy模块创建两个随机数组,用来作为图形绘制的数据: import pyqtgraph as pg import numpy as np x = np.random.random(50) ...
- HashMap常问面试题整理
去面试时,hashmap总是被经常问的问题,下面总结了几道关于hashmap的问题. 1.hashmap的主要参数都有哪些? 2.hashmap的数据结构是什么样子的?自己如何实现一个hashmap? ...
- 2.Redis 控制短信重发
需要两个缓存 key名称 phone-busy,缓存1分钟key名称 phone-send-count,缓存1天,每成功发送一条+1 发送的时候流程如下: 判断phone-busy是否存在,存在直接报 ...
- SpringBoot整合分布式ZooKeeper和Dubbo
ZooKeeper ZooKeeper是一个分布式的,开放远吗的分布式应用程序协调服务.它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护.域名服务.分布式同步.组服务等. 服务提供者 ...
- List作为泛型参数实现可接收存储任意类型的List对象
原文链接:https://blog.csdn.net/eeeeasy/article/details/80999650?utm_source=blogxgwz2 在项目中遇到一个问题,想要封装一个通用 ...
- 从字符串到常量池,一文看懂String类设计
从一道面试题开始 看到这个标题,你肯定以为我又要讲这道面试题了 // 这行代码创建了几个对象? String s3 = new String("1"); 是的,没错,我确实要从这里 ...