gpt4 book ai didi

c# - MassTransit 实现 : sometimes message not received

转载 作者:太空宇宙 更新时间:2023-11-03 16:17:04 25 4
gpt4 key购买 nike

我正在与一个非常奇怪的问题作斗争...我在 Windows 7 Ultimate 上使用 .NET 4.0 实现了 WCF 服务之间的服务总线通信(通过 MassTransit + MSMQ)。当服务启动时,一切正常,它们相互接收消息,但在给定的时间点,它们不再接收消息,直到我在计算机管理 -> 服务和应用程序 -> 消息队列中手动删除专用队列 -> 私有(private)队列。

对于每项服务,我都有一个 Bootstrap ,我在其中配置了 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 方法。唯一的方法是手动删除专用队列并重新启动服务。然后系统再次正常工作,直到下一个麻烦:-(。

任何建议将不胜感激。

非常感谢!亚历山德罗

最佳答案

UseMulticastSubscriptionClient 似乎不是处理订阅的最稳定方式。我整个周末都在努力让一切正常运行,现在我有了永久(多个)订阅。

在我对 this question 的回复中我已经写下了我的步骤。这对你有帮助吗?

关于c# - MassTransit 实现 : sometimes message not received,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15499724/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com