我正在使用MSMQ来传递XML。但是,我想让队列更通用,让它接受类实例作为消息。这让人想起需要二进制格式化程序。
我一直在阅读有关二进制格式化程序和MSMQ的内容。似乎通过使用二进制格式化程序,我正在使MSMQ做一些它真的不应该做的事情。换句话说,我现在正在MSMQ上传递基于二进制的数据,而它想要变得非常轻且基于字符串。或者我有错吗?
我所读到的是,更复杂的数据类型(即二进制)应存储在数据库中。但是,这可能会出现问题,因为这些数据是可序列化的。
我传递的数据不是基于流的。
如果我要利用MSMQ,它是否应该严格用于基于字符串的消息而不是二进制?
答案 0 :(得分:0)
似乎通过使用二进制格式化程序,我正在让MSMQ做一些它本不应该做的事情。
你被误导了。实际上,MSMQ附带了自己的BinaryMessageFormatter类,当你想以某种灵活性为代价来提高速度时,它显然是有用的。
文档可以这样说:
BinaryMessageFormatter非常有效,可以用来 序列化大多数对象。结果非常紧凑,解析速度快, 但不允许松散耦合的消息传递 XmlMessageFormatter。松散耦合意味着客户端和 服务器可以独立地对发送的类型进行版本控制 接收。
当应用程序使用实例发送消息到队列时 在MessageQueue类中,格式化程序将对象序列化为 流并将其插入到邮件正文中。从队列中读取时 使用MessageQueue,格式化程序将消息数据反序列化为 消息的Body属性。
BinaryMessageFormatter提供的吞吐量比 XmlMessageFormatter。纯速时使用BinaryMessageFormatter 而不是松散耦合的消息传递。