Enterprise Library Step By Step系列(十四):创建基于消息队列(MSMQ)的异步日志

创建基于消息队列(MSMQ)的异步日志

一.概述

Enterprise Library Step By Step系列里我们说过,日志和检测应用程序块主要由2部分组成:ClientDistributorClient负责创建消息,这些消息将由Distributor写入目标位置。Client根据分发策略(Distribution Strategies)发送消息到Distributor,在Application Block中提供了2个分发策略:In ProcessMSMQ,默认的是In Process策略。同步日志是在Client进程中完成的,而异步日志是利用了MSMQ来实现的,Client需要创建日志消息并发送到MSMQ消息队列。另外一个进程则等待到达的消息,并写入合适的日志接收池

应用程序块中包含一个Windows Service: MSMQ Distributor Service。当安装该服务后,该服务会在指定的时间间隔检测消息队列。

我们看一下日志和监测应用程序块处理的流程图:

 

二.安装并配置MSMQ Distributor Service

1.打开Visual Studio命令行工具,切换到目录(默认的企业库安装路径)C:\Program Files\Microsoft Enterprise Library\bin下,运行如下命令:

installutil /i MsmqDistributor.exe

注意:必须要以这种方式安装服务,否则安装不成功。

2.安装过程中会弹出一个设置服务登录对话框,要求输入用户名和密码。此时用户名和密码的形式必须以域用户的形式输入,用<.\username>的形式也是可以的,如下图所示:

 

3.启动服务。我们在服务管理器里面找到Enterprise Library Logging Distributor Service这项服务,手工启动它。

 

4.用文本编辑器打开MsmqDistributor.exe.config文件,删除如下这节:

<configurationSections>
    
<configurationSection name="loggingConfiguration" encrypt="false">
      
<storageProvider xsi:type="XmlFileStorageProviderData" name="XML File Storage Provider" path="loggingConfiguration.config" />
      
<dataTransformer xsi:type="XmlSerializerTransformerData" name="Xml Serializer Transformer">
        
<includeTypes />
     
</dataTransformer>
</configurationSection>

5.用Configuration Console, 打开 MsmqDistributor.exe.config 文件

MSMQ Distributor Service 添加到 Distributor Settings,如下图所示:

 

6.设定 MsmqPath 属性匹配 Client 的队列名,我们可以修改MsmqPath的值,但是该值必须与我们应用程序中的Client配置的一致。

 

三.使用MSMQ创建异步日志

1.我们前面说过,Client Settings 决定分发策略,一个Client的所有消息使用同一个策略。所以我们不能同时创建两个策略,必须先删除In Process后,才能创建MSMQ

 

2.创建MSMQ分发策略之后,注意队列名必须和我们刚才在第二节里面所说的一致:

 

3.其他的操作就跟我在Enterprise Library Step By Step系列里面写的一样了。

请大家参考:

Enterprise Library Step By Step系列(七):日志和监测应用程序块——入门篇

Enterprise Library Step By Step系列(八):日志和监测应用程序块——进阶篇

作者:TerryLee
出处:http://terrylee.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
posted @ 2005-12-01 14:20 TerryLee 阅读(6227) 评论(22) 编辑 收藏

 回复 引用   
#1楼 2005-12-01 17:16 funidudu[未注册用户]
嗯,速度好快啊,谢谢了。
 回复 引用   
#2楼 2005-12-01 17:31 funidudu[未注册用户]
请问,我运行后老是报错说“队列未在 DS 中注册。”,然后服务就停了。
这大概是个什么原因呢?

 回复 引用 查看   
#3楼[楼主] 2005-12-01 17:32 Terrylee      
@funidudu

呵呵

正好最近完成了一个项目,这两天休息

写的有些仓促,有问题多多原谅^_^

 回复 引用 查看   
#4楼[楼主] 2005-12-01 17:38 Terrylee      
@funidudu

在上面“安装并配置MSMQ Distributor Service“里面检查你从第四步开始有没有问题?

可能是MsmqDistributor.exe.config文件配置问题

我没有遇到过这种情况

你再把整个过程检查一遍吧,尤其关键环节不能出错^_^


 回复 引用 查看   
#5楼 2005-12-01 17:52       
好, 异步日志写得好,一直在关注。一直在学习。
Terrylee ,我想提点意见,说错了不要介意。
Enterprise Library 这一系列,都没有深讲,在用的时候很多地方都感到迷茫,只有找其它资料参考。 可不可以结合实战,深入的讲解呢?
可能要求太过分了。不要介意。

 回复 引用   
#6楼 2005-12-01 17:59 autuwater[未注册用户]
我安装MsmqDistributor.exe的时候就停了。怎么回事情啊?Terrylee 。我使用普通的方式填写的用户名,没有使用域名方式。

 回复 引用 查看   
#7楼[楼主] 2005-12-02 08:24 Terrylee      
@杰

谢谢你提的意见

其实我也有这种想法

现在Step By Step系列已经写的差不多了,我不打算继续往下再写了

后面我会打破应用程序块之间的限制,就其中的某些应用写几篇随笔

这次写异步日志也是这个意思

也希望你继续关注,多提意见^_^

 回复 引用 查看   
#8楼[楼主] 2005-12-02 08:30 Terrylee      
@autuwater

你必须确认两个问题:

1.是否是用命令行的方式安装的?

2.必须要用域用户或.\<username>的形式,例如:.\administrator

否则安装不成功!

 回复 引用   
#9楼 2005-12-02 10:17 autuwater[未注册用户]
Terrylee .
是的,第一条我是遵循的。
第二条在我的电脑不是域的时候使用“.\<username>的形式”的形式。现在我改为域了,继续使用“.\<username>的形式”的错误是:
"在“安装”阶段发生异常。
System.ComponentModel.Win32Exception: 帐户名与安全标识间无任何映射完成。"

但我使用域用户方式,"域.<username>"还是不成功。

 回复 引用   
#10楼 2005-12-02 10:19 autuwater[未注册用户]
@Terrylee

谢谢。我使用域用户。用“域\<username>”的形式安装成功了。为什么我必须使用超级管理员的帐户才可以呢。我使用超级管理组的一个别的帐户却不行。为什么?

谢谢@Terrylee

 回复 引用   
#11楼 2005-12-02 11:46 autuwater[未注册用户]
怎么启动服务的时候启动不成功
 回复 引用 查看   
#12楼[楼主] 2005-12-02 12:15 Terrylee      
@autuwater

用"超级管理员的帐户"安装可能是权限问题吧,我不太清楚。

启动服务的时候报什么错误?

 回复 引用   
#13楼 2008-12-11 16:25 小雨点[未注册用户]
启动服务时,提示依存服务不存在或已被标记为删除
 回复 引用 查看   
#14楼[楼主] 2008-12-15 10:25 TerryLee      
@小雨点
估计是MSMQ服务的问题:)