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

  1. rabbitmq在ios中实战采坑

    1. rabbitmq在ios中实战采坑 1.1. 问题 ios使用rabbitmq连接,没过多久就断开,并报错.且用android做相同的步骤并不会报错,错误如下 Received connecti ...

  2. ServiceStack.RabbitMQ在站点中使用时导致静态页面无法正常解析

    当站点中集成ServiceStack.RabbitMQ时快速处理异步请求时,官方建议初始化如下: public class AppHost : AppHostHttpListenerBase { pu ...

  3. RabbitMQ在java中基础使用

    RabbitMQ相关术语:          1.Broker:简单来说就是消息队列服务器实体.          2.Exchange:消息交换机,它指定消息按什么规则,路由到哪个队列.      ...

  4. 案例源码解读及思路:RabbitMQ在springboot中的配置

    程序员的高级之处不是什么都会,而是对自己不会的进行抽象,然后完成自己的工作.比如对于RabbitMQ,按照字面理解,就将其看成Message Queue,也就是用来容纳对象的集合.很多功能都拆分给一个 ...

  5. RabbitMQ在分布式系统中的应用

    怎么保证可靠性的? RabbitMQ提供了几种特性,牺牲了一点性能代价,提供了可靠性的保证. 持久化当RabbitMQ退出时,默认会将消息和队列都清除,所以需要在第一次声明队列和发送消息时指定其持久化 ...

  6. Redis和RabbitMQ在项目中的使用

    一:Redis的使用 1.先引入pom.xml的依赖 <dependency> <groupId>redis.clients</groupId> <artif ...

  7. RabbitMQ 在 C# 中简单应用

    RabbitMQ是什么及如何安装就不再赘述,百度一下就知道了,只是在配置方面要多加注意. 话不多说,先直接上一个简示例代码 发送端: ConnectionFactory factory = new C ...

  8. rabbitmq在storm中使用

    storm中只能进行任务计算,不能保存中间结果,最后结果. 这就有一个需求,保存计算结果,最好还是分布式的,因为storm也是分布式,大数据计算. 流行的分布式计算中使用队列保存数据居多. kafka ...

  9. RabbitMQ之项目中实战

    说了那么多,还不是为了在项目中进行实战吗,在实践中检验真理,不然我学他干嘛,不能解决项目中的实际问题的技术都是耍流氓... 一.后台管理系统发送消息 瞎咧咧:后台管理系统发送消息到交换机中,然后通知其 ...

  10. rabbitmq在kubernetes中持久化集群部署

    背景 Javashop电商系统的消息总线使用的事rabbitmq,在订单创建.静态页生成.索引生成等等业务中大量采用异步消息系统,这个对于mq高可用的要求有两个重要的考量: 1.集群化 2.可扩容 3 ...

随机推荐

  1. [开源] 基于Layui组件封装的后台模版,HG-Layui-UI通用后台管理框架V1.0版

    HG框架简介 HG-Layui-UI框架,是基于layui最新版UI搭建的一套通用后台管理框架,借鉴了市面上各大主流框架风格,采用iframe标签页实现,保留了传统开发模式的简单实用性. 为快速开发减 ...

  2. 学习之Redis(一)

    一.redis简介 一般学习,最好先去官网,之所以建议看官网,是因为这是一手的学习资料,其他资料都最多只能算二手,一手资料意味着最权威,准确性最高.https://redis.io/topics/in ...

  3. TortoiseGit 设置ssh方式

    TortoiseGit使用扩展名为ppk的密钥,而不是ssh-keygen生成的rsa密钥. 也就是说使用 ssh-keygen  -t rsa  -C "576953565@qq.com& ...

  4. swift实现单例的四种方式

    单例模式 单例模式是设计模式中最简单的一种,甚至有些模式大师都不称其为模式,称其为一种实现技巧,因为设计模式讲究对象之间的关系的抽象,而单例模式只有自己一个对象. 当你只需要一个实例的时候需要使用单例 ...

  5. Mybatis动态查询

    需要导入的jar包: 实体类User: package com.bjsxt.pojo; import java.io.Serializable; public class User implement ...

  6. 笔记||Python3之列表与元组

    列表List: 特性:①列表也是一种Squence类型 ②下标 ③能切片 ④可以存储任何类型的数据,每个元素是任意类型 ⑤内容可以改变:增删改查 1  --  值   列表的元素值是可以改变的   a ...

  7. 使用iCamera 测试mt9d111 200w高分辨率摄像头小结

    使用iCamera 测试mt9d111 200w高分辨率摄像头小结 先看下产品特性 安装效果 根据前面博客的经验,该摄像头,默认配置即有输出,分辨率为800*600,yuv 于是可以写 如果使用默认配 ...

  8. Python3 常用模块3

    目录 numpy模块 创建numpy数组 numpy数组的属性和用法 matplotlib模块 条形图 直方图 折线图 散点图 + 直线图 pandas模块 numpy模块 numpy模块可以用来做数 ...

  9. Day 09 函数

    目录 函数 函数的基本概念 为何使用函数 定义函数 什么是参数(形参,parameter) 定义函数的三种形式 无参函数 有参函数 空函数 函数的参数 形参和实参(parameter & ar ...

  10. Android中实现轮询下载安装应用的Dialog

    前言 因为有涉及到静默安装,主要是针对已经root的设备,应需求,是在ARM的主板上开发的,所以对于常规手机仅能做到轮询下载,做不到静默安装. 效果图 用的鸿洋大神的百分比布局,各个分辨率都完美适配, ...