如果你想在Windows下使用排队产品进行持久消息传递,运行.NET 2.0及更高版本,那么今天存在哪些MSMQ替代品?我知道ActiveMQ(http://activemq.apache.org/),我看过WSMQ的引用(指向http://wsmq.net),但该网站似乎已经关闭.
还有其他选择吗?
MSMQ:从队列接收时,什么可能导致"资源不足以执行操作"错误?
当队列只保留2,000条消息时,每条消息的大小约为5KB.
我有一个在MSMQ上运行的WCF服务.内存随着时间的推移逐渐增加,表明存在某种内存泄漏.我在本地运行该服务并使用PerfMon监控一些计数器.总CLR内存管理堆字节保持相对恒定,而进程的私有字节随时间增加.这让我相信存在某种非托管内存泄漏.假设存在非托管内存泄漏问题,我该如何解决这个问题?是否有任何工具可以用来向我提供有关导致非托管内存泄漏的提示?此外,我所有的服务都是从事务队列读取并写入数据库,所有这些都是DTC事务的一部分(通过要求服务合同上的事务来处理).我没有明确地使用COM或DllImports做任何事情.
提前致谢!
我的团队负责人已经要求我调查MSMQ作为我们产品新版本的选项.我们在当前版本中使用SQL Service Broker.我已经完成了相当多的实验和谷歌搜索,以找到哪个产品更符合我的需求,但我想我会问我最熟悉的网站来编程答案.
一些细节:
到目前为止我发现的事情:
我错过了什么吗?这里有明显的赢家吗?任何想法,经验或链接都会受到重视.谢谢!
编辑:我们最终坚持使用服务代理,因为我们的一些客户端代码中使用了自定义数据库框架(我们更好地处理事务).该代码捕获了事务的SQL,但没有.客户端代码也是.NET的1.1版本,因此我们必须升级所有客户端代码.谢谢你的帮助!
在XP机器上有一个由.net服务创建的私有消息队列.当我想在VB6应用程序中访问此私有队列时,我不断收到"访问被拒绝"错误.所以这似乎是一个安全问题,只有我不明白为什么即使我以管理员身份登录,我仍然无法访问在同一台机器上创建的队列.还有什么我必须考虑的事情.
关于如何在VB6中使用队列的示例
Public msgQueue As MSMQQueue
Private Sub OpenQueue()
Dim MQ As New MSMQQueueInfo
MQ .PathName = ".\Private$\incommingQueue"
Set msgQueue = MQ.Open(MQ_RECEIVE_ACCESS, MQ_DENY_NONE)
End Sub
Run Code Online (Sandbox Code Playgroud) 好的,这是一个非常简单和基本的问题.如果我在Windows机器A上有一个想要写入Windows机器B队列的应用程序,我是否需要在机器A上安装MSMQ(即使那里没有队列)?我刚刚开始为我的应用程序使用队列,并试图找出一些基本原理.
谢谢
我构建了一个事务性的MSMQ WCF服务.我在我的操作中使用了以下属性:
[OperationBehavior(TransactionScopeRequired = true, TransactionAutoComplete = true)]
Run Code Online (Sandbox Code Playgroud)
我在服务中使用Nhibernate.使用Nhibernate我在会话中提交.如果我禁用Nhibernate提交,则会正确处理消息并从队列中删除.通过此提交,Nhibernate事务正确,但我的消息进入重试队列.
这是我进入Nhibernate服务跟踪的例外.
Description Handling an exception. Exception details: System.Transactions.TransactionAbortedException: The transaction has aborted. ---> System.ObjectDisposedException: Cannot access a disposed object.
Object name: 'Transaction'.
at System.Transactions.Transaction.DependentClone(DependentCloneOption cloneOption)
at System.Transactions.TransactionScope.SetCurrent(Transaction newCurrent)
at System.Transactions.TransactionScope.PushScope()
at System.Transactions.TransactionScope.Initialize(Transaction transactionToUse, TimeSpan scopeTimeout, Boolean interopModeSpecified)
at System.Transactions.TransactionScope..ctor(Transaction transactionToUse, TransactionScopeAsyncFlowOption asyncFlowOption)
at System.Transactions.TransactionScope..ctor(Transaction transactionToUse)
at NHibernate.Transaction.AdoNetWithDistributedTransactionFactory.DistributedTransactionContext.System.Transactions.IEnlistmentNotification.Prepare(PreparingEnlistment preparingEnlistment)
--- End of inner exception stack trace ---
at System.Transactions.TransactionStatePromotedAborted.PromotedTransactionOutcome(InternalTransaction tx)
at System.Transactions.TransactionStatePromotedEnded.EndCommit(InternalTransaction tx)
at System.Transactions.CommittableTransaction.Commit()
at System.ServiceModel.Dispatcher.TransactionInstanceContextFacet.Complete(Transaction transaction, Exception error)
Run Code Online (Sandbox Code Playgroud)
似乎nhibernate提交破坏了WCF上的事务.我找不到解决这个问题的方法.
任何帮助可能会受到赞赏
现有流程响应用户输入更改表中预订记录的状态字段.
我有另一个要编写的进程,它将为具有特定状态的记录异步运行.它将读取表记录,执行一些操作(包括对第三方Web服务的调用),并更新记录的状态字段以指示处理已完成(或错误,错误计数).
此操作听起来非常类似于队列.在这种情况下使用MSMQ而不是SQL表有什么好处和权衡,为什么我要选择一个而不是另一个?
我们的软件是在表格中添加和更新记录.
这是一项将执行异步处理的新工作(Windows服务).这需要"永远向上".
之前在工作中使用我的PC的人设置了我需要访问的私有MSMQ.他们已离开银行,但权限仍然存在,我无法访问队列或授予自己编辑权限以取消限制.
我现在是这台机器上的管理员,所以我假设有一些方法可以让我改变一些东西.Been搜索高低,但我发现的大部分内容都与通过脚本做事有关.
任何帮助,赞赏,
谢谢
我正在为我们的产品开发消息/通知系统.基本要求是:
这些库将用C#编写.Spring.NET刚刚发布了一个具有大量优秀消息抽象的里程碑版本,这很棒 - 我计划广泛使用它.我的基本问题归结为消息经纪人的问题.我的架构看起来像应用程序 - >消息代理队列 - >侦听的服务器应用程序,将所有消息分派到他们需要去的地方,并处理那些长期消息的生命周期 - >消息代理队列或主题 - >监听应用.
最后,问题是:我应该使用哪个消息代理?我偏向于ActiveMQ - 我们在上一个项目中使用它并喜欢它.我不能想到对它的单一攻击,除了它是Java,并且需要在某个地方的服务器上安装java,这对于将使用这项服务的一些人来说可能很难卖.我一直在关注的另一个选择是MSMQ.我出于某种未知原因对它有偏见,而且它似乎也没有很好的多播支持.
有没有人用MSMQ这样的东西?任何利弊,可能会以某种方式影响投票的东西?
最后一点,我们使用的是.NET 2.0.
msmq ×10
.net ×2
c# ×2
messaging ×2
sql ×2
transactions ×2
wcf ×2
admin ×1
memory-leaks ×1
nhibernate ×1
permissions ×1
soa ×1
sql-server ×1
vb6 ×1
windows ×1