最近使用MSMQ进行并发控制测试,公布一些数据,供大家看一下,一起讨论一下,初始使用MSMQ,欢迎指指点点。。
如题,首先把基本的说一下
操作系统:window server 2008
数据库:MSSQL2008 R2
接受MQ的服务器配置如下(2300块的惠普塔式服务器,喷吧。。经费不容易申请啊)

数据库地址:192.168.0.3(同样的配置,同样的操作系统)
接受MQ服务器地址:192.168.0.6(同样的配置,同样的操作系统)
数据库表设计
UserRecharge 用户充值记录
UserAmount 用户金额
UserBuy 用户购买记录
ConsumerLog 消费日志
曝光部分属性
public class ConsumerLog
{
public int Pkid { set; get; }
public int UserPkid { set; get; }
public string UserAccount { set; get; }
public int Classification { set; get; }//分类(1增加2减少)
public decimal Amount { set; get; }//操作金额
public decimal SurplusAmount { set; get; }//剩余金额
public string Description { set; get; }
public DateTime Time { set; get; }
}
public class UserBuy
{
public int Pkid { set; get; }
public int UserPkid { set; get; }
public string UserAccount { set; get; }
public string ProductName { set; get; }//产品名称
public int Quantity { set; get; }//数量
public decimal UnitPrice { set; get; }//单位
public DateTime Time { set; get; }
public string Description { set; get; }
}
public class UserAmount
{
public int Pkid { set; get; }
public string UserAccount { set; get; }
public decimal Amount { set; get; }//充值金额
}
public class UserAmount
{
public int Pkid { set; get; }
public string UserAccount { set; get; }
public decimal Amount { set; get; }//用户金额
}
部分代码
using (MessageQueueTransaction myTransaction = new MessageQueueTransaction())
{
try
{
myTransaction.Begin();
Message myMessage = myQueue.Receive(myTransaction);
MQModel.List list = (MQModel.List)myMessage.Body;
if (list.Classification == 1)
{
//充值
bool isSuccess = Recharge(list.RechargeModel);
if (isSuccess)
{
myTransaction.Commit();
Console.WriteLine("充值成功!金额:{0}", list.RechargeModel.Amount);
}
else
{
myTransaction.Abort();
}
}
else
{
//购买
bool isSuccess = Buy(list.BuyModel);
if (isSuccess)
{
myTransaction.Commit();
Console.WriteLine("购买成功:产品{0},单价{1},数量{2}", list.BuyModel.ProductName, list.BuyModel.UnitPrice, list.BuyModel.Quantity);
}
else
{
myTransaction.Abort();
}
}
}
catch (Exception ex)
{
myTransaction.Abort();
Console.WriteLine("发送失败,己取消事务,原因:{0}", ex.Message);
}
}
测试结果公布(处理条数/分钟):
(A)EF+事务
3315 3346 3350 3344 3353
(B)EF 没有 事务
3386 3539 3538 3479 3509
(C)ADO.NET+事务
5246 5309 5243 5273 5286
(D)ADO.NET 没 事务
5709 5722 5780 5764 5704
B比A提升约4%
D比C提升约:8%
C和D比A和B,提升约67%
纯写入ADO.NET与EF的效率,很久的一个测试,找不到电脑配置,数据库在本地。

NET技术交流群哈 160046333 小广告,常来讨论哦。。
...全文
相关推荐
MSMQ.zip_MSMQ CSharp_csharp msmq_msmq
**事务处理**:MSMQ支持事务性消息,这意味着消息的发送和接收可以作为数据库事务的一部分,确保数据的一致性和完整性。5.
在Windows Docker容器中使用MSMQ
本文讲解了如何在Windows Docker容器中使用MSMQ实现消息传递。通过配置Dockerfile和MSMQ权限,可使容器内服务连接远程MSMQ队列,并测试应用能读取消息并转发到另一队列。文章还
MSMQ 的例子,可以给微软的系统开发分布使用系统。
通过分析提供的文件名,我们可以推测这个项目是关于如何使用MSMQ API进行消息队列操作的一个示例或测试平台,开发者可以通过此来理解和学习如何在实际项目中应用MSMQ。
MSMQ C++ API 例子
**消息的发送**:使用`Send`函数,开发者可以将消息放入队列。消息通常包含一个消息体和元数据,如优先级、时间戳和目标队列信息。C++代码会演示如何构建这样的消息并将其安全地放入队列。3.
Msmq自用-请勿下载
在Java中使用MSMQ通常需要依赖于第三方库,如`jmsmq`或`msmq-jms`,这些库提供了API,使得Java应用能够创建、读取、删除MSMQ队列,并发送和接收消息。


