RabbitMQ 在.Net 中的使用
RabbitMQHelper
public static class RabbitMQHelper
{
// 定义 RabbitMQ 基本参数 private static string HostName = "127.0.0.1"; private static int Port = ; private static string UserName = "admin"; private static string Password = "admin"; private static byte[] ToBytes(string str) => Encoding.UTF8.GetBytes(str); /// <summary>
/// 设置交换机
/// </summary>
/// <param name="exchange">交换机名称</param>
/// <param name="type">direct fanout headers topic</param>
public static void SetExchange(string exchange, string type)
{
using (var channel = BuildChannel())
{
channel.ExchangeDeclare(exchange, type, true, false);
}
} /// <summary>
/// 设置队列
/// </summary>
/// <param name="queue">队列名称</param>
/// <param name="exchange">交换机</param>
public static void SetQueue(string queue, string exchange)
{
using (var channel = BuildChannel())
{
//定义队列名称 持久化:是
channel.QueueDeclare(queue, true, false, false, null); // 绑定队列
channel.QueueBind(queue, exchange, queue, null); }
} /// <summary>
/// 设置队列
/// </summary>
/// <param name="queues">队列集合</param>
/// <param name="exchange">交换机</param>
public static void SetQueue(List<string> queues, string exchange)
{
using (var channel = BuildChannel())
{
foreach (var queue in queues)
{
//定义队列名称 持久化:是
channel.QueueDeclare(queue, true, false, false, null); // 绑定队列
channel.QueueBind(queue, exchange, queue, null); } }
} /// <summary>
/// 发布
/// </summary>
/// <param name="exchange">交换机</param>
/// <param name="queue">队列</param>
/// <param name="message">消息体</param>
public static void Publish(string exchange, string queue, string message)
{
using (var channel = BuildChannel())
{
channel.BasicPublish(exchange, queue, null, ToBytes(message));
}
} /// <summary>
/// 订阅
/// </summary>
/// <param name="queue">队列</param>
/// <param name="func">func</param>
public static void Subscribe(string queue, Func<string, bool> func)
{
var channel = BuildChannel(); //事件基本消费者
EventingBasicConsumer consumer = new EventingBasicConsumer(channel); //接收到消息事件
consumer.Received += (ch, ea) =>
{
var message = Encoding.UTF8.GetString(ea.Body); func.Invoke(message); //Task.Run( () => { func.Invoke(message); }); //确认该消息已被消费
channel.BasicAck(ea.DeliveryTag, false); }; //启动消费者 设置为手动应答消息
channel.BasicConsume(queue, false, consumer); } private static IModel BuildChannel()
{
return new ConnectionFactory()
{
HostName = HostName,
Port = Port,
UserName = UserName,
Password = Password }.CreateConnection().CreateModel();
} }
具体使用
class Program
{
static void Main(string[] args)
{
//初始化交换机
RabbitMQHelper.SetExchange("ServerDirect", "direct"); // 初始化队列
RabbitMQHelper.SetQueue("LogCenter", "ServerDirect");
RabbitMQHelper.SetQueue("SMSCenter", "ServerDirect");
RabbitMQHelper.SetQueue("EmailCenter", "ServerDirect"); //发布消息 for (int i = ; i < ; i++)
{
RabbitMQHelper.Publish("ServerDirect", "LogCenter", "log"+i);
} RabbitMQHelper.Publish("ServerDirect", "SMSCenter", "sms111111111"); Console.ReadKey();
}
}
RabbitMQ 在.Net 中的使用的更多相关文章
- rabbitmq在ios中实战采坑
1. rabbitmq在ios中实战采坑 1.1. 问题 ios使用rabbitmq连接,没过多久就断开,并报错.且用android做相同的步骤并不会报错,错误如下 Received connecti ...
- ServiceStack.RabbitMQ在站点中使用时导致静态页面无法正常解析
当站点中集成ServiceStack.RabbitMQ时快速处理异步请求时,官方建议初始化如下: public class AppHost : AppHostHttpListenerBase { pu ...
- RabbitMQ在java中基础使用
RabbitMQ相关术语: 1.Broker:简单来说就是消息队列服务器实体. 2.Exchange:消息交换机,它指定消息按什么规则,路由到哪个队列. ...
- 案例源码解读及思路:RabbitMQ在springboot中的配置
程序员的高级之处不是什么都会,而是对自己不会的进行抽象,然后完成自己的工作.比如对于RabbitMQ,按照字面理解,就将其看成Message Queue,也就是用来容纳对象的集合.很多功能都拆分给一个 ...
- RabbitMQ在分布式系统中的应用
怎么保证可靠性的? RabbitMQ提供了几种特性,牺牲了一点性能代价,提供了可靠性的保证. 持久化当RabbitMQ退出时,默认会将消息和队列都清除,所以需要在第一次声明队列和发送消息时指定其持久化 ...
- Redis和RabbitMQ在项目中的使用
一:Redis的使用 1.先引入pom.xml的依赖 <dependency> <groupId>redis.clients</groupId> <artif ...
- RabbitMQ 在 C# 中简单应用
RabbitMQ是什么及如何安装就不再赘述,百度一下就知道了,只是在配置方面要多加注意. 话不多说,先直接上一个简示例代码 发送端: ConnectionFactory factory = new C ...
- rabbitmq在storm中使用
storm中只能进行任务计算,不能保存中间结果,最后结果. 这就有一个需求,保存计算结果,最好还是分布式的,因为storm也是分布式,大数据计算. 流行的分布式计算中使用队列保存数据居多. kafka ...
- RabbitMQ之项目中实战
说了那么多,还不是为了在项目中进行实战吗,在实践中检验真理,不然我学他干嘛,不能解决项目中的实际问题的技术都是耍流氓... 一.后台管理系统发送消息 瞎咧咧:后台管理系统发送消息到交换机中,然后通知其 ...
- rabbitmq在kubernetes中持久化集群部署
背景 Javashop电商系统的消息总线使用的事rabbitmq,在订单创建.静态页生成.索引生成等等业务中大量采用异步消息系统,这个对于mq高可用的要求有两个重要的考量: 1.集群化 2.可扩容 3 ...
随机推荐
- 浅谈css样式之list-type
在我们的工作学习中,大多数人使用列表标签的时候总一般的选择是把list-type设置成none.不过可能很多人对于这个属性的细节并没有很深的了解.甚至会把list-type和list-type-sty ...
- nginx编译安装配置模块大全
使用configure命令配置构建.它定义了系统的各个方面,包括允许nginx用于连接处理的方法.最后,它会创建一个Makefile.该configure命令支持以下参数:--help 打印帮助信息. ...
- SQL Server 2019 深度解读:微软数据平台的野望
本文为笔者在InfoQ首发的原创文章,主要利用周末时间陆续写成,也算近期用心之作.现转载回自己的公众号,请大家多多指教. 11 月 4 日,微软正式发布了其新一代数据库产品 SQL Server 20 ...
- GlusterFS 存储
GlusterFS简介: 互联网四大开源分布式文件系统分别是:MooseFS.CEPH.Lustre.GusterFS. GluterFS最早由Gluster公司开发,其目的是开发一个能为客户提供全局 ...
- ARTS-S C语言主线程获取子线程返回值
#include<stdio.h> #include<stdlib.h> #include <pthread.h> typedef struct { int stu ...
- SpringBoot学习【一】----- HelloWord
springboot是什么 Spring Boot可以轻松创建可以运行的独立的,生产级的基于Spring的应用程序. 大多数Spring Boot应用程序只需要很少的Spring配置. 提供了一个运行 ...
- 【Web技术】399- 浅谈前端代码加密
作者简介:于航,PayPal Senior Software Engineer,在 PayPal 上海负责 Global GRT 平台相关的技术研发工作.曾任职于阿里巴巴.Tapatalk 等企业.f ...
- 【CuteJavaScript】Angular6入门项目(1.构建项目和创建路由)
本文目录 一.项目起步 二.编写路由组件 三.编写页面组件 1.编写单一组件 2.模拟数据 3.编写主从组件 四.编写服务 1.为什么需要服务 2.编写服务 五.引入RxJS 1.关于RxJS 2.引 ...
- SpringSpringBoot上传文件到七牛云
准备工作 maven pom.xml添加七牛云的sdk依赖 <dependency> <groupId>com.qiniu</groupId> <artifa ...
- 【spring boot】配置信息
======================================================================== 1.feign 超时配置 2.上传文件大小控制 3.J ...