MSMQ大消息发送与接收

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

MSMQ大消息发送与接收(大于4M)

2010-11-22 11:17

前断日子在网上狗了下大消息发送与接收的时候,发现这方面接收的比较少,经过一段时间的学习,现把学习成果和大家分享下。(基于biztalk)

由于MSMQ是微软提供的免费的消息中间件,但是其只可以接收4M以下的消息,大于4M的消息就接收不了(强烈希望微软人道点,让MSMQ能接收100M这样消息),网上也有不少文章通过修改注册表来扩大消息容量,但是经测试感觉不稳定,在实际的项目中使用风险太大。还好微软在Biztalk工具中提供了大消息发送接口,并带了个很好的例子(在安装好的biztalk目录中找到

SDK\Samples\AdaptersUsage\MSMQLarge路径中)不过需要注意消息队列的路径和正常的消息路径不一样,正确为:DIRECT=TCP:192.168.8.44\private$\TEST (前面FormatName)。

但是他没有提供MSMQ消息接收大消息的示例和接口,一开始的时候,我手动组包,即根据“消息ID”后部分来组包(ID前部分一直的时候,如果后部分连续,则认为是同一个报文),最后批量发送大消息测试才发这方式行不通。不过突然想到,微软既然自己能发送肯定它也能收,于是我又到biztalk安装目录中寻找蛛丝马迹,果然功夫不负有心人,在biztalk主目录中找到了

Talk.Adapter.MSMQ.Msmq开头的程序集,心中不免一喜。新建一项目加入Talk.Adapter.MSMQ.MsmqLargeMessageWrapper.dll,测试果然可以接收大消息了!代码如下(

key="default.MqPathReceive" value="FormatName:DIRECT=TCP:192.168.8.4 4\private$\TEST"/>):

MessageQueue messageQueue = new

MessageQueue(config.MqPathReceive);

MQRTLargeWrapper wrapper = new MQRTLargeWrapper(); ManagedLargeMessage largeMessage = null;

try

{

largeMessage = wrapper.Receive(timeOut, messageQueue.ReadHandle, ref msgSize, IntPtr.Zero);

}

finally

{

messageQueue.Close();

}

包装类中也包括了发送接口。

到网上一查才知道这东西也太贵了,30多万啊!还是想办法让它脱离biztalk 比较好点,于是通过反编译工具,找到包装类引用了哪些程序集,就是Talk.Tracing.dll比较难搞,反编译显示在“全局程序集缓存”中,进去一看才知道没有dll的实际路径的,郁闷!那就搜索biztalk的安装目录吧,没有,那可能放到系统盘了,那就继续吧搜windows目录和Program Files 目录,也没有,超郁闷!不过还好,最好在安装包中找到了这个程序集。一切具备,把测试程序拷贝到没有biztalk的环境下,还真的很好用(把mqrtlarge.dll 放入到bin目录中,否则发送会出异常!)。

整理下,发送和接收大消息所需程序集有:

1、mqrtlarge.dll(区分32和64位系统)

2、LargeMessages.dll(如果发送也是用包装类的话,则此文件可以应该可以不要,未测试)

3、Talk.Streaming.dll

4、Talk.Tracing.dll

5、Talk.Adapter.MSMQ.MsmqAdapterCommon.dll

6、Talk.Adapter.MSMQ.MsmqLargeMessageWrapper.dll

相关文档
最新文档