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实现 蓝桥杯VIP 算法训练 完数
问题描述 一个数如果恰好等于它的因子之和,这个数就称为"完数".例如,6的因子为1.2.3,而6=1+2+3,因此6就是"完数".又如,28的因子为1.2.4. ...
- Java实现 LeetCode 240 搜索二维矩阵 II(二)
240. 搜索二维矩阵 II 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target.该矩阵具有以下特性: 每行的元素从左到右升序排列. 每列的元素从上到下升序排列. ...
- Java实现 LeetCode 234 回文链表
234. 回文链表 请判断一个链表是否为回文链表. 示例 1: 输入: 1->2 输出: false 示例 2: 输入: 1->2->2->1 输出: true 进阶: 你能否 ...
- Java实现 LeetCode 109 有序链表转换二叉搜索树
109. 有序链表转换二叉搜索树 给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树. 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1. ...
- Java实现约瑟夫环问题
约瑟夫环问题起源于一个犹太故事.约瑟夫环问题的大意如下: 罗马人攻占了桥塔帕特,41个人藏在一个山洞中躲过了这场浩劫.这41个人中,包括历史学家Josephus(约瑟夫)和他的一个朋友.剩余的39个人 ...
- Java实现第十届蓝桥杯求和
试题 A: 求和 本题总分:5 分 [问题描述] 小明对数位中含有 2.0.1.9 的数字很感兴趣,在 1 到 40 中这样的数包 括 1.2.9.10 至 32.39 和 40,共 28 个,他们的 ...
- java实现第四届蓝桥杯空白格式化
空白格式化 本次大赛采用了全自动机器测评系统. 如果你的答案与标准答案相差了一个空格,很可能无法得分,所以要加倍谨慎! 但也不必过于惊慌.因为在有些情况下,测评系统会把你的答案进行"空白格式 ...
- java代码(1)---Java8 Lambda
Lambda 一.概述 1.什么是Lambda表达式 //1.不需要参数,返回值为5 () -> 5 //2.接收一个参数(数字类型),返回其2倍的值 x -> 2 * x //3. ...
- Python 图像处理 OpenCV (6):图像的阈值处理
前文传送门: 「Python 图像处理 OpenCV (1):入门」 「Python 图像处理 OpenCV (2):像素处理与 Numpy 操作以及 Matplotlib 显示图像」 「Python ...
- RocketMQ系列(二)环境搭建
RocketMQ的基本概念在上一篇中给大家介绍了,这一节将给大家介绍环境搭建.RocketMQ中最基础的就是NameServer,我们先来看看它是怎么搭建的. NameServer RocketMQ要 ...