zoukankan      html  css  js  c++  java
  • 【默认加入持久化机制,防止消息丢失,v0.0.3】对RabbitMQ.Client进行一下小小的包装,绝对实用方便

      RabbitMQ是一个老牌的非微软的消息队列组件,一般来说应该能满足中小型公司对消息队列生产的需求,平时我们在.NET开发环境下运用它是可能会需要RabbitMQ.Client的SDK库,此库是官网提供,目前最新发布版本是v4.1.3。在我们对接项目时有时需要碰到对接上的注意,随之而来感觉对官方提供的SDK客户端还可以进行一次包装开发。

      Nuget安装命令:Install-Package RabbitMQ.Client.Wrap

      GitHub地址:https://github.com/rjf1979/RabbitMQ.Client.Wrap

      Nuget命令:Install-Package RabbitMQ.Client.Wrap

      以下就是对包装后的代码示例:  

    string queueName = "queue-demo";
    var client = Client.Build("admin", "123456", "VHostName", "192.168.xxx.xxx",5672);
    client.Publisher.QueueDeclare(queueName);
    string messageData = "test-" + DateTime.Now;
    //支持异步发布
    await mqClient.Publisher.Publish(queueName, messageData);
    
    
    //同样Client对象可以复用订阅
    var tag = client.Subscriber.Subscribe(queueName, message =>
      {
        Console.WriteLine($"Recevice Data > {message},Time > {DateTime.Now}");
        
    return true;
      });
    Console.WriteLine($"Subscriber Tag > {tag} , Time > {DateTime.Now}");

    如果需要异常事件记录

    //发布者注册一个异常事件处理,此处的注册异常事件,只有在发生异常情况下会触发
    client.Publisher.RegisterExceptionHandler((message, exception) => {   //处理消息   //处理异常 });

    需要对日志记录自定义化,只需要注册你自己的日志记录实现类

        class MyLogger:RabbitMQ.Client.Wrap.Interface.ILog
        {
            public void Info(string message, Exception exception = null, params object[] args)
            {
                //实现你的记录日志代码
            }
    
            public void Warn(string message, Exception exception = null, params object[] args)
            {
                //实现你的记录日志代码
            }
    
            public void Error(string message, Exception exception = null, params object[] args)
            {
                //实现你的记录日志代码
            }
    
            public void Fatal(string message, Exception exception = null, params object[] args)
            {
                //实现你的记录日志代码
            }
    
            public void Debug(string message, Exception exception = null, params object[] args)
            {
                //实现你的记录日志代码
                //此日志会在#if DEBUG下会运行
            }
    
            public void Trace(string message, Exception exception = null, params object[] args)
            {
                //实现你的记录日志代码
                //此日志会在#if TRACE下会运行
            }
        }

    //把实现类注册进去

    Logger.RegisiterLogger(new MyLogger());

    好了,介绍到这里,大家如果有兴趣可以去nuget上安装运用,如果在使用当中有问题可以及时联系我,我的QQ在右上角的介绍里

        
  • 相关阅读:
    Roslyn 语法树中的各种语法节点及每个节点的含义
    WPF 使用 WindowChrome,在自定义窗口标题栏的同时最大程度保留原生窗口样式(类似 UWP/Chrome)
    在制作跨平台的 NuGet 工具包时,如何将工具(exe/dll)的所有依赖一并放入包中
    如何在 .NET 库的代码中判断当前程序运行在 Debug 下还是 Release 下
    像黑客一样!Chrome 完全键盘操作指南(原生快捷键 + Vimium 插件)
    .NET 使用 XPath 来读写 XML 文件
    XML 的 XPath 语法
    WPF 中使用附加属性,将任意 UI 元素或控件裁剪成圆形(椭圆)
    Windows 10 四月更新,文件夹名称也能区分大小写?
    C#/.NET 中推荐的 Dispose 模式的实现
  • 原文地址:https://www.cnblogs.com/rjf1979/p/6900033.html
Copyright © 2011-2022 走看看