之前的文章中,介绍了如何将RabbitMQ以WCF方式进行发布。今天就介绍一下我们产品中如何使用RabbitMQ的!
     
     在Discuz!NT企业版中,提供了对HTTP错误日志的记录功能,这一点对企业版非常重要,另外存储错误日志使用了MongoDB,理由很简单,MongoDB的添加操作飞快,即使数量过亿之后插入速度依旧不减。
     
     在开始正文之前,先说明一下本文的代码分析顺序,即:程序入口==》RabbitMQ客户端===>RabbitMQ服务端。好了,闲话少说,开始正文!    
     
     首先是程序入口,也就是WCF+RabbitMQ客户端实现:    
     
     因为Discuz!NT使用了HttpModule方式来接管HTTP链接请求,而在.NET的HttpModule模板中,可以通过如下方法来接管程序运行时发生的ERROR,如下:    
    
context.Error += new EventHandler(Application_OnError);
    
     而“记录错误日志"的功能入口就在这里:    
   
public void Application_OnError(Object sender, EventArgs e)
    {
        
string requestUrl = DNTRequest.GetUrl();
        HttpApplication application 
= (HttpApplication)sender;
        HttpContext context 
= application.Context;

#if EntLib
        
if (RabbitMQConfigs.GetConfig() != null && RabbitMQConfigs.GetConfig().HttpModuleErrLog.Enable)//当开启errlog错误日志记录功能时
        {
            RabbitMQClientHelper.GetHttpModuleErrLogClient().AsyncAddLog(
new HttpModuleErrLogData(LogLevel.High, context.Server.GetLastError().ToString()));//异步方式
            
//RabbitMQHelper.GetHttpModuleErrLogClient().AddLog(new HttpModuleErrLogData(LogLevel.High, "wrong message infomation!"));//同步方式
            return;
        }
#endif
        ...
     }

相关文章: