我的代码:
string _path = "mymachine\\Private$\\example";
// create a message queue object
MessageQueue MQueue = new MessageQueue(_path);
// create the message and set the base properties
Message Msg = new Message("Messagem");
Msg.ResponseQueue = MQueue;
Msg.Priority = MessagePriority.Normal;
Msg.UseJournalQueue = true;
Msg.Label = "gps1";
// send the message
MQueue.Send(Msg);
// close the mesage queue
MQueue.Close();
Run Code Online (Sandbox Code Playgroud)
没有错误,但我的MessageQueue中没有任何内容......任何帮助?
似乎MSMQ不使用任何数据库管理系统来管理消息.
MSMQ如何管理消息?
它是否将消息存储在平面文件中?
我正在尝试实现一个消息管理系统.
我有一个名为myPrivateTransactionQueue的事务性队列,托管在名为myReceivingServer的Win2008R2服务器上,该服务器应该从另一个名为mySendingServer的服务器接收消息.当mySendingServer发送消息时,mySendingServer上的MSMQ日志中会出现一条条目,其中显示:
Message with ID {f748cc48-8017-4a64-9ff6-61c68564445f}\56008 was sent to queue DIRECT=OS:<myReceivingServerName >\private$\<myPrivateTransactionalQueue>
Run Code Online (Sandbox Code Playgroud)
但是,myReceivingServer,在MSMQ日志中有一个条目:
Message came over network
Run Code Online (Sandbox Code Playgroud)
但是,该消息未在myReceivingServer上传递给myPrivateTransactionalQueue.到目前为止我看过的事情:
我在这里有点心理,因为我根本无法解释这个消息.任何帮助将非常感激.
编辑:我发现这个链接http://blogs.msdn.com/b/johnbreakwell/archive/2010/01/22/why-does-msmq-keep-losing-my-messages.aspx所以我会看看这是否解释我的问题.将以任何决议回复.
编辑2:好的,我讨厌这个,但问题只是解决了.我在上面的配置中没有改变任何东西.但我现在有了它的工作.
编辑3:这是John Breakwell的评论:为了确保您在再次看到此问题时知道根本原因(并且没有理由相信它已经好转),您需要启用一些选项,例如负面源日记作为在我的博客中提到.现在您知道您的系统没有弹性,现在是修复它的好时机
我想在一个MSMQ消息队列上使用Linq.据我所知,我需要将消息队列作为IEnumerable Howerver
var queryableQ = new MessageQueue(myQueuePath) as IEnumerable<Message>;
Run Code Online (Sandbox Code Playgroud)
导致querableQ为null,表示无法像这样强制转换MessageQueue.
是否有一种不同的方法可用于使用Linq访问MessageQueue.
(我知道GetAllMessages()将返回一个数组,当然很容易用Linq查询,但我宁愿不将整个队列内容带入内存)
我没有很多使用MSMQ的经验,有人建议我看看MassTransit来帮助实现解决方案,但我很难弄清楚使用MassTransit + MSMQ是否适合这项工作.
我们有一个由多个用户使用的WPF应用程序(3.5).持久性是从应用程序(通过NHibernate)到数据库完成的.到目前为止,用户会定期刷新视图,以确保他们拥有最新的更新.但是,我们现在希望在使用发布/订阅消息传递持久化实体时向每个应用程序实例发送通知.客户端应用程序都在同一个域中运行,并且应该能够满足大多数所需的依赖关系(例如,在客户端计算机上安装MSMQ).
总结一下:Client1发布更新消息---> ????? ---->所有其他活动客户端都会收到它.
由于我是MSMQ的新手,我甚至不确定架构应该是什么样子.
我创建了一个小POC希望它可以工作,但我最终得到了我认为被称为"竞争消费者"的东西.我想要发生的是一个应用程序实例发送消息,所有应用程序实例都接收它.
任何建议,方向或建议将不胜感激!
这是POC视图模型代码(注意 - 在我看来,localhost将替换为每个应用程序实例将发送消息的服务器):
更新:添加网络密钥(小猫)
public class MainViewModel : IDisposable, INotifyPropertyChanged
{
private Guid id;
public MainViewModel()
{
id = Guid.NewGuid();
Publish = new RelayCommand(x => OnExecutePublishCommand(), x => !string.IsNullOrEmpty(Message));
Messages = new ObservableCollection<MessagePayload>();
Bus.Initialize(sbc =>
{
sbc.UseMsmq();
sbc.SetNetwork("Kittens");
sbc.VerifyMsmqConfiguration();
sbc.UseMulticastSubscriptionClient();
sbc.ReceiveFrom(string.Format("msmq://localhost/{0}", ConfigurationManager.AppSettings["queue"]));
sbc.Subscribe(subs => subs.Handler<MessagePayload>(OnReceiveMessage));
});
}
public ICommand Publish { get; private set; }
private string message;
public string Message
{
get { return …Run Code Online (Sandbox Code Playgroud) 如何在不使用?的情况下检索本地计算机上所有私有MSMQ队列的名称System.Messaging.MessageQueue.GetPrivateQueuesByMachine(".")?我正在使用PowerShell,因此任何使用COM,WMI或.NET的解决方案都是可以接受的,尽管后者更可取.
请注意,此问题有一个返回所有队列对象的解决方案.我不想要这些对象(当有很多队列时它太慢而且有点松散),我只想要他们的名字.
这是我第一次使用BizTalk进行跨机器,异步,可靠的通信.
我想知道有没有办法直接从一台机器发送消息到BizTalk队列,或者我必须使用本地MSMQ,后者又向BizTalk发送消息?
在C#中,是否有用于向BizTalk队列发送消息的绑定?
对于MSMQ,我知道有NetMsmqBinding.
干杯
更新:
由于我引入了一些混乱,我会尝试解释一下,如果我错了,请纠正我.
据我所知,ESB实现了可用于可靠的异步通信(简称消息传递)的队列或消息通道的概念.现在,我很难将BizTalk放入这个概念中.如果BizTalk是一个ESB,如Sonic或TIBCO,有几十种对ESB概念的解释和相同数量的意见......
现在,据我所知,例如在实现JMS API的TIBCO中,没有队列或排队本地客户端计算机上的服务(例如MSMQ),但它们在TIBCO ESB和客户端应用程序上存在和配置我使用JMS API将消息发送到这些队列.
因此,当我想通过BizTalk与不同机器上的应用程序进行通信并且我想使用消息传递时,我将在本地计算机上使用MSMQ,MSMQ会将这些消息传输到BizTalk和下游的其他应用程序?
另外,我应该在哪里配置本地MSMQ和BizTalk之间的通信?我应该将BizTalk配置为侦听给定的MSMQ以获取新消息,还是应该在MSMQ本身上进行某些配置?
当我尝试通过消息总线测试队列时.我已经检查过,权限设置为完全控制每个人.我使用来自不同机器的'msmqmng.exe send'将消息放入队列,它可以工作,绝对是我发送的消息.那么我可能会遗漏哪些其他活动部件?
我刚刚开始研究ServiceStack和WOW,我不妨把WCF抛到窗外,但它也可以使用Redis发送消息.
我熟悉NServiceBus,它也用于发送消息和pub/subs.由于ServiceStack是一个Web服务,您可以为外部客户端打开它; 我不认为NServiceBus可以做到这一点.
除此之外,选择其中一种技术的优缺点是什么?有哪些技术可能是首选的.
我有一个C#Publisher-Subscriber项目,打算MSMQ service在Windows中使用。该代码是在中开发的.Net Framework 4。我想在中运行它.Net Core。但是我得到了错误
“类型或名称空间名称“消息传递”在名称空间系统中不存在”。
.Net Core是否支持MSMQ?
.Net Core是否具有一个System.Messaging.dll似乎缺少的对应项?
msmq ×10
c# ×5
.net ×1
.net-core ×1
biztalk ×1
com ×1
dll ×1
linq ×1
masstransit ×1
messaging ×1
nservicebus ×1
powershell ×1
queue ×1
redis ×1
servicestack ×1
wcf ×1
wmi ×1
wpf ×1