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();
}
}

最新文章

  1. c# socket
  2. .NET单元测试的艺术-2.核心技术
  3. 三、jdk工具之jstack(Java Stack Trace)
  4. 《Java编程那点事儿》读书笔记(一)——基本数据结构
  5. 用 Xcode 开发 Cydia Substrate 插件(二)
  6. leetcode面试准备: Jump Game II
  7. C/C++语言学习——内存分配管理
  8. MFC的规则DLL中资源使用的问题
  9. openwrt 3g模块上网
  10. HTML学习笔记四
  11. Android学习笔记- ButterKnife 8.0注解使用介绍
  12. 零基础Windows + JAVA(jdk)环境搭建以及eclipse安装和使用
  13. cmd 命令 添加端口
  14. CodeCombat编程游戏
  15. 轻松学习JavaScript二十七:DOM编程学习之事件模型
  16. 【HTML&amp;CSS】搜狐页面代码编写
  17. libcurl使用easy模式阻塞卡死等问题的完美解决---超时设置
  18. 走进 Cake for .NET
  19. Yii2.0 添加分类category model类
  20. (六)Net Core项目使用Controller之一 c# log4net 不输出日志 .NET Standard库引用导致的FileNotFoundException探究 获取json串里的某个属性值 common.js 如何调用common.js js 筛选数据 Join 具体用法

热门文章

  1. php 图片指定留白叠加缩放
  2. 比特宇宙-TCP/IP的诞生
  3. hello gulp,使用gulp的第一天。
  4. 以面向对象的思维,搭建Android与多ble蓝牙设备并发通讯小框架
  5. 学习ThinkPHP的第20天--MySQL事务操作、查询事件、一对一关联
  6. webpack(四) --css样式及图片打包
  7. unity3d 动态添加地面贴图 草地
  8. 大数据学习笔记——Hbase高可用+完全分布式完整部署教程
  9. 【hibernate】存储图片
  10. 你不知道的JavaScript(上)this和对象原型(二)