前言

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基本使用的更多相关文章

  1. .NET 2.0 参考源码索引

    http://www.projky.com/dotnet/2.0/Microsoft/CSharp/csharpcodeprovider.cs.htmlhttp://www.projky.com/do ...

  2. rabbitmq, windows/linux, c/c++/node.js/golang/dotnet

    官网:http://www.rabbitmq.com/ zeromq 相当于 message backbone,而rabbitmq相当于message broker.有的应用系统中,二者并存. (1) ...

  3. DotNet Core中使用RabbitMQ

    上一篇随笔记录到RabbitMQ的安装,安装完成,我们就开始使用吧. RabbitMQ简介 AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协 ...

  4. Dapr Pub/Sub 集成 RabbitMQ 、Golang、Java、DotNet Core

    前置条件: <Dapr运用> <Dapr 运用之 Java gRPC 调用篇> <Dapr 运用之集成 Asp.Net Core Grpc 调用篇> 搭建 Rabb ...

  5. dotnet core use RabbitMQ

    安装RabbitMQ 自从使用了Docker之后,发现Docker真的是比虚拟机好用啊, 因此我这里在Docker里面创建一个RabbitMQ容器. 这里注意获取镜像的时候要获取management版 ...

  6. DotNet 资源大全中文版(Awesome最新版)

    Awesome系列的.Net资源整理.awesome-dotnet是由quozd发起和维护.内容包括:编译器.压缩.应用框架.应用模板.加密.数据库.反编译.IDE.日志.风格指南等. 算法与数据结构 ...

  7. [转]如何循序渐进向dotnet架构师发展

    微软的DotNet开发绝对是属于那种入门容易提高难的技术.而要能够成为DotNet架构师没有三年或更长时间的编码积累基本上是不可能的.特别是在大 型软件项目中,架构师是项目核心成员,承上启下,因此RU ...

  8. RabbitMQ学习系列(三): C# 如何使用 RabbitMQ

    上一篇已经讲了Rabbitmq如何在Windows平台安装,还不了解如何安装的朋友,请看我前面几篇文章:RabbitMQ学习系列一:windows下安装RabbitMQ服务 , 今天就来聊聊 C# 实 ...

  9. 在C#中使用消息队列RabbitMQ

    1.什么是RabbitMQ.详见 http://www.rabbitmq.com/. 作用就是提高系统的并发性,将一些不需要及时响应客户端且占用较多资源的操作,放入队列,再由另外一个线程,去异步处理这 ...

随机推荐

  1. Java实现蓝桥杯勇者斗恶龙

    勇者斗恶龙 你的王国里有一条n个头的恶龙,你希望雇一些骑士把它杀死(即砍掉所有头). 村里有m个骑士可以雇佣,一个能力值为x的骑士可以砍掉恶龙一个直径不超过x的头, 且需要支付x个金币.如何雇佣骑士才 ...

  2. Java实现 蓝桥杯 算法提高 宰羊

    试题 算法提高 宰羊 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 炫炫回了内蒙,肯定要吃羊肉啦,所有他家要宰羊吃. 炫炫家有N只羊,羊圈排成一排,标号1~N.炫炫每天吃掉一只羊( ...

  3. Java实现第九届蓝桥杯复数幂

    复数幂 题目描述 设i为虚数单位.对于任意正整数n,(2+3i)^n 的实部和虚部都是整数. 求 (2+3i)^123456 等于多少? 即(2+3i)的123456次幂,这个数字很大,要求精确表示. ...

  4. Linux 用户管理命令-usermod和chage

    usermod和useradd命令的使用相类似,useradd针对的是新创建的用户可以修改他的信息,usermod则可以修改已经存在的用户的信息,选项也基本相同 usermod [选项] 用户名 -L ...

  5. CMAKE工具学习

    最近在学习各大物联网平台的SDK包,发现其工程都使用了一种叫cmake的工具在管理代码.于是花了一天时间简单学习了解了cmake工具,其目的是让自己能读懂使用该工具管理的代码,并能简单使用该工具管理我 ...

  6. bfs算法总结

    BFS(广度优先搜索) 类似于树的按层遍历 常用实现方法:队列 模板: 注意: 只能用来求解无权图的最短路径问题 队列:用来存储每一层便利得到的节点 标记:对于遍历过的结点,应将其标记,以防重复访问 ...

  7. 记 Centos zabbix-agent启动失败解决思路

    一. 环境介绍 系统版本:Centos7.4 zabbix-agent 版本:zabbix-agent 3.4.7 二. 问题现象 启动zabbix-agent时启动失败 查看zabbix-agent ...

  8. 查看Android系统中硬件信息的文件

    文件目录: 使用Linux命令,进入到/proc目录 进入/proc目录,可以查看内存信息(memoinfo)或CPU信息(cpuinfo),使用cat命令

  9. 将pycharm中的代码上传到远程Ubuntu中

    no bb...下面直接放图开干...^_^

  10. 【Java入门】JDK安装和环境变量配置(Win7版)

    系统环境:Windows7 x64 安装JDK和JRE版本:1.8.0_191 1.下载JDK安装包 Oracle官网下载网址:https://www.oracle.com/technetwork/j ...