Tag: msmq

关于如何组织后台队列操作的文章

现在我正在思考如何组织系统架构。 该系统将由网站组成,用户可以在其中上传一些文档然后将其处理回来,并且一些后台守护程序具有应该处理提供的文档的任务队列。 我的问题是:我应该实现我上面告诉你的守护进程,作为只有命名管道的WCF服务(不需要netowork访问这个服务)? 有关于此的任何建议/提示/建议吗? 用户可以提供的数据只是一堆XML文件。 ASP.NET网站将公开获取此XML文件的function,然后以某种方式应该能够将它们传递给守护程序。 你能否指点我关于那个话题的一些文章。 提前致谢! 编辑后 几个小时后发现人们在这里建议的MSMQ,我对该技术的想法更多的是分布式架构(处理节点位于不同的机器上,并且通过网络在不同的计算机之间交换消息)。 目前不需要分离到独立的机器。 只有机器上有ASP.NET网站和一些处理程序。 是否有必要使用MSMQ? 编辑#2 由于我在这里使用.NET Framework,请建议仅提供与.NET兼容的内容。 这里真的没有任何选择。

等待事件处理程序的异步

我很困惑如何最好地处理这种情况。 我不想等待异步调用的响应。 具体来说,我有: public async Task FetchQueuedApiAsync(TimeSpan receiveTimeout) { var message = await Task.Factory.FromAsync( ReadQueue.BeginReceive(receiveTimeout), ReadQueue.EndReceive); return message.Body as IApiData; } 这按预期工作。 但是,如果超时到期,则不得调用ReadQueue.EndReceive,否则将引发exception。 显然,FromAsync并不知道这一点并盲目地调用它 – 解雇exception。 不要在超时时调用EndReceive的要求由MSMQ实现,超出了我的控制范围。 当消息准备就绪或发生超时时,队列会公开事件。 这是您通常检查消息是否存在的位置,然后根据文档调用EndReceive。 标准听众…. ReadQueue.ReceiveCompleted += ReadQueue_ReceiveCompleted; 我的问题是,我不明白该怎么做,仍然有这个等待(即我希望能够等待我现在,但通过委托处理它)。 那有意义吗?

使用C#安装Msmq

我正在为需要安装MSMQ的应用程序创建一个安装程序,所以如果没有安装MSMQ,我需要安装msmq。 那么可以使用C#或任何命令安装MSMQ吗? 我正在使用.net 4.0。 提前致谢

如何从队列中删除邮件?

我有消息陷入队列,我正在寻找一种以编程方式删除它们的方法。 有没有办法从队列中删除超过x天的消息? 我可以连接和删除这样的队列,但不知道如何删除单个邮件。 MessageQueue queue = new MessageQueue(@”.\private$\SomeTestName”); //queue.Purge(); //deletes the entire queue try { // Peek and format the message. Message m = myQueue.Peek(); // Display message information. Console.WriteLine(“Sent time {0}”, m.SentTime); Console.WriteLine(“Arrived time {0}”, m.ArrivedTime); }

重新启动消息队列服务后,服务不接收消息

我们有一个服务从n个消息队列接收消息。 但是,如果重新启动消息队列服务,即使消息队列服务已成功重新启动,消息检索服务也会停止接收消息。 我试图专门捕获消息检索服务中抛出的MessageQueueException并再次调用队列的BeginReceive方法。 但是,在消息队列服务重新启动的2秒钟内,我得到大约1875个exception实例,然后当我们的StartListening方法中抛出另一个MessageQueueException时,服务停止运行。 有没有一种优雅的方法从消息队列服务重新启动恢复? private void OnReceiveCompleted(object sender, ReceiveCompletedEventArgs e) { MessageQueue queue = (MessageQueue)sender; try { Message message = queue.EndReceive(e.AsyncResult); this.StartListening(queue); if (this.MessageReceived != null) this.MessageReceived(this, new MessageReceivedEventArgs(message)); } catch (MessageQueueException) { LogUtility.LogError(String.Format(CultureInfo.InvariantCulture, StringResource.LogMessage_QueueManager_MessageQueueException, queue.MachineName, queue.QueueName, queue.Path)); this.StartListening(queue); } } public void StartListening(MessageQueue queue) { queue.BeginReceive(); } 我需要处理这个导致的无限循环问题并清理一下但是你明白了。 发生MessageQueueException时,调用RecoverQueue方法。 private void RecoverQueue(MessageQueue queue) […]

通过HTTP使用MSMQ。 如何解决队列?

我目前正在尝试将MSMQ与C#和.NET一起使用以实现IPC。 我试图了解它是如何工作的,我对访问MSMQ队列时路径名和格式名之间的差异感到很困惑。 我在以下post中发现了一些类似的问题: MSMQ通过HTTP调用未到达目标队列 如何设置MSMQ服务器,以便可以通过Internet访问它 如何通过相应的WCF绑定使用MSMQ over http? 但是,他们都使用MSMQ和WCF,我现在不想使用WCF。 我想要实现的目标如下: 客户端:通过http将数据发送到队列。 服务器:通过http从队列接收数据。 我的观点是,我希望服务器,客户端和队列都托管在可能不同的计算机中。 (现在我正在测试同一台机器上的所有东西)。 这里我有以下代码,它们展示了我的想法: 首先,我创建队列: if(!System.Messaging.MessageQueue.Exists(@”.\Private$\SimplestExamplePrivateQueue”); System.Messaging.MessageQueue.Create(@”.\Private$\SimplestExamplePrivateQueue”); 客户代码: 然后,在客户端,我有一个回调函数,当用户按下按钮以发送消息时调用该函数。 private void button1_Click(object sender, System.EventArgs e) { try { // Create a connection to the queue System.Messaging.MessageQueue mq = new System.Messaging.MessageQueue(@”FormatName:Direct=http://localhost/msmq/Private$/SimplestExamplePrivateQueue”); // Create a point object to send Point myPoint = new Point (Convert.ToInt32(textBox2.Text), Convert.ToInt32(textBox3.Text)) […]

MSMQ的主要优点

我见过很多套接字应用,其中有MSMQ的使用。 但是当我详细介绍时,我认为我们可以在没有MSMQ的情况下做到这一点,所以我想知道MSMQ的主要优点是什么。 为什么有人在他自己的应用程序中使用MSMQ。

不在NServiceBus中自动创建队列

我正在运行NServiceBus 3.0.0 rc2但是当我启动应用程序(作为本地管理员)而没有预先创建MSMQ时,它出错了: 队列不存在或您没有足够的权限来执行操作。 使用NServiceBus 2.6没有发生这种情况。 以下是我的配置: var bus = Configure.With() .Log4Net() .NinjectBuilder() .XmlSerializer() .DefiningCommandsAs(t => typeof(ICommand).IsAssignableFrom(t)) .DefiningEventsAs(t => typeof(IEvent).IsAssignableFrom(t)) .DefiningMessagesAs(t => typeof(IMessage).IsAssignableFrom(t)) .MsmqTransport() .DefineEndpointName(“subscriber.input”) .IsTransactional(true) .PurgeOnStartup(false) .UnicastBus() .LoadMessageHandlers() .ImpersonateSender(false) .CreateBus() .Start(); 和 我可以看到一个配置扩展方法来禁用自动创建队列但没有启用它。 如果我预先创建队列,它工作正常。

C#中的MSMQ COM API

从C#使用MSMQManagement的最佳方法是什么? 当远程机器断开连接时,我需要能够查看和清除本地传出队列。 显然,一些用户可以通过COM API执行此操作,但在“COM参考”选项卡中,我没有其他网站/博客/post提到的“Microsoft Message Queue 3.0对象库”(也没有任何类似的东西)。 我在机器上搜索了Interop.MSMQ.dll,但也找不到它。 我们正在使用VS 2008并在Windows 7 64位上运行。 我错过了什么? 是否有其他机制通过“普通”托管类来实现这一目标? 谢谢

使用Windows服务接收MSMQ消息

我正在用C#创建一个Windows服务。 听消息的最佳方法是什么? 我该如何正确编码?