MSMQ 消息队列技术详解与应用实践
1. MSMQ 事务处理
MSMQ 支持事务,事务是一个原子工作单元,要么全部成功,要么全部失败。以银行系统为例,一个事务可能涉及通过一个消息队列从支票账户扣款,通过另一个队列向储蓄账户存款。如果在事务进行中系统发生故障,除非事务回滚,否则银行将面临被盗用资金的风险。系统重启后,事务可以再次执行。
以下是在 C# 和 VB.NET 中实现向队列添加两条消息的事务代码示例:
C# 代码
private void btnSend_Click(object sender, System.EventArgs e)
{
int zero = 0;
string queueName = ".\\private$\\test2";
MessageQueueTransaction msgTx = new MessageQueueTransaction();
MessageQueue mq;
if (MessageQueue.Exists(queueName))
{
mq = new MessageQueue(queueName);
}
else
{
mq = MessageQueue.Create(queueName, true);
}
msgTx.Begin();
try
{
mq.Send("Message 1", msgTx);
zero = 5 / zero; //