我正在解决一个非常奇怪的问题......我已经在WCF服务之间实现了服务总线通信(通过MassTransit + MSMQ),在Windows 7 Ultimate上实现了.NET 4.0。当服务启动时,一切正常并且它们彼此接收消息,但是在给定点,它们不再接收它们,直到我手动删除计算机管理中的专用队列 - >服务和应用 - >消息队列 - >私人队列。
根据每项服务,我有一个引导程序,我配置了MassTransit:
// Bootstrapper configuration
public void Configure(IUnityContainer container)
{
// Service bus configuration
var config = ConfigurationDataAccess.GetSupervisionServiceConfig();
// Cleaning up the former Private Queues before to start the service
var privateQueues = MessageQueue.GetPrivateQueuesByMachine(System.Environment.MachineName);
foreach (var messageQueue in privateQueues)
{
try
{
if (messageQueue.QueueName.Contains("supervisionservice"))
{
MessageQueue.Delete(messageQueue.Path);
}
}
catch (MessageQueueException)
{
// An exception has occurred trying to remove a private message queue.
}
}
// Initializing MassTransit
var bus = ServiceBusFactory.New(sbc =>
{
sbc.UseMsmq();
sbc.VerifyMsmqConfiguration();
sbc.UseMulticastSubscriptionClient();
sbc.ReceiveFrom(config.ServiceBusReceiveFromAddress);
});
container.RegisterInstance(bus);
//Start the service...
}
}
然后,服务主类扩展了MassTransit,这里是一个例子:
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
public class DataService : Consumes<ServiceMessage>.Selected
{
public DataService()
{
// The service bus object takes the instance from the bootstrapper through the dependency
// injection of the Unity.
ServiceBus.SubscribeInstance(this);
}
public bool Accept(ServiceMessage message)
{
// For an easy explanation
return true;
}
public void Consume(ServiceMessage message)
{
// Treat the message
}
public void SendMessage(ServiceMessage message)
{
// Publish the message over the service bus
ServiceBus.Publish(message);
}
}
正如我所解释的那样,在给定的点上不再调用Accept方法。唯一的方法是手动删除专用队列并重新启动服务。然后系统再次正常工作,直到下一个麻烦: - (。
任何建议都会非常感激。
非常感谢! 的Alessandro
答案 0 :(得分:0)
UseMulticastSubscriptionClient似乎不是处理订阅的最稳定方式。我整个周末一直在努力让所有事情都正常运行,我现在有永久(多个)订阅。
在我对this question的回复中,我写下了自己的步骤。 这对你有帮助吗?