对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", "", "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在右上角的介绍里
对RabbitMQ.Client进行一下小小的包装,绝对实用方便的更多相关文章
- 【默认加入持久化机制,防止消息丢失,v0.0.3】对RabbitMQ.Client进行一下小小的包装,绝对实用方便
RabbitMQ是一个老牌的非微软的消息队列组件,一般来说应该能满足中小型公司对消息队列生产的需求,平时我们在.NET开发环境下运用它是可能会需要RabbitMQ.Client的SDK库,此库是官网提 ...
- Go/Python/Erlang编程语言对比分析及示例 基于RabbitMQ.Client组件实现RabbitMQ可复用的 ConnectionPool(连接池) 封装一个基于NLog+NLog.Mongo的日志记录工具类LogUtil 分享基于MemoryCache(内存缓存)的缓存工具类,C# B/S 、C/S项目均可以使用!
Go/Python/Erlang编程语言对比分析及示例 本文主要是介绍Go,从语言对比分析的角度切入.之所以选择与Python.Erlang对比,是因为做为高级语言,它们语言特性上有较大的相似性, ...
- 基于RabbitMQ.Client组件实现RabbitMQ可复用的 ConnectionPool(连接池)
一.本文产生原由: 之前文章<总结消息队列RabbitMQ的基本用法>已对RabbitMQ的安装.用法都做了详细说明,而本文主要是针对在高并发且单次从RabbitMQ中消费消息时,出现了连 ...
- Amqp整合com.rabbitmq.client.ShutdownSignalException: channel error; protocol method异常处理
java.io.IOException at com.rabbitmq.client.impl.AMQChannel.wrap(AMQChannel.java:126) at com.rabbitmq ...
- rabbitmq 出现 com.rabbitmq.client.ShutdownSignalException: , ..................
-classpath "C:\Program Files\Java\jdk1.8.0_144\jre\lib\charsets.jar;C:\Program Files\Java\jdk1. ...
- Caused by: com.rabbitmq.client.ShutdownSignalException: connection error
周五下午的时候升级了一个环境,跑了批处理sh升级脚本后,启动时报下列错误: INFO | jvm 1 | 2017/02/24 17:39:09 | java.io.IOException INFO ...
- RabbitMQ.Client API (.NET)中文文档
主要的名称空间,接口和类 核心API中定义接口和类 RabbitMQ.Client 名称空间: 1 using RabbitMQ.Client; 核心API接口和类 IModel :表示一个AMQP ...
- com.rabbitmq.client.impl.ForgivingExceptionHandler.log:119 -An unexpected connection driver error occured
在服务器上安装了一个RabbitMq,并新创建了一个用户授予了管理员角色,登录控制台查看一切正常,兴高采烈启动项目进行连接,结果一盆冷水下来,报如下错误: o.s.a.r.l.SimpleMessag ...
- Caused by: com.rabbitmq.client.ShutdownSignalException: channel error; protocol method: #method<channel.close>(reply-code=406, reply-text=PRECONDITION_FAILED - inequivalent arg 'type' for exchange 'me
在启动RabbitMQ消费端的时候报错:Caused by: com.rabbitmq.client.ShutdownSignalException: channel error; protocol ...
随机推荐
- Jquery对复选框CheckBox的操作
checkbox: 多选框 //获取选中值 checkbox:$("#checkbox_id").attr("value"): 多选框checkbox,打勾: ...
- QT5 && VS2013配置
1.下载安装包 qt-opensource-windows-x86-msvc2013_64-5.7.0.exe VS2013_RTM_ULT_ENU.iso 插件:qt-vs-addin-msvc20 ...
- Python实现二叉树的四种遍历
对于一个没学过数据结构这门课程的编程菜鸟来说,自己能理解数据结构中的相关概念,但是自己动手通过Python,C++来实现它们却总感觉有些吃力.递归,指针,类这些知识点感觉自己应用的不够灵活,这是自己以 ...
- centos7 下nfs的配置
td p { margin-bottom: 0cm } p { margin-bottom: 0.25cm; line-height: 120% } a:link { } 补充知识: RPC 主程序: ...
- XStream的使用
一:功能 可以将JavaBean转换(序列化)成XMl 二:依赖jar包 xstream.jar xpp3_min.jar(xml pull parser)xml解析器 三:使用步骤 XStream ...
- IIS环境下部署项目
1.环境部署 1.1安装IIS7 进入控制面板,选择"程序和功能",进入如下页面后,点击"Turn Windows features on or off". 找 ...
- C语言学习第四章
今天学习C语言循环结构,为什么要用循环呢?因为有时候我们对一堆的数字进行重复的处理的时候要重复的编写一些相同或者差不多的代码,让程序显得很臃肿,而且写着也麻烦,如果用循环来写的话能简化很多,出错的话也 ...
- WPF触屏Touch事件在嵌套控件中的响应问题
前几天遇到个touch事件的坑,记录下来以增强理解. 具体是 想把一个listview嵌套到另一个listview,这时候如果list view(子listview)的内容过多超过容器高度,它是不会出 ...
- Eclipse显示内存占用
- Linux的kobject机制
作者:Younger Liu 本作品采用知识共享署名-非商业性使用-相同方式共享 3.0 未本地化版本许可协议进行许可. sysfs文件系统下的每个目录对应于一个kobj,kset是kobj的封装,内 ...