gpt4 book ai didi

c# - Nservicebus : Sending a message in a Schedule. 每个 Action

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

我正在使用从官方 NserviceBus 创建的代码 Walk through ,我正在尝试使用 Schedule 操作发送消息

public class SendOrder : IWantToRunWhenBusStartsAndStops
{
public IBus Bus { get; set; }
public Schedule _schedule;

public SendOrder(Schedule schedule)
{
_schedule = schedule;
}

public void Start()
{
_schedule.Every(TimeSpan.FromSeconds(5),() =>
{
Bus.Send("Ordering.Server", new PlaceOrder {Id = Guid.NewGuid()});
Console.WriteLine("Sent a message.");
});
}

public void Stop()
{
}
}

但是我得到一个错误,我不明白为什么它会调用超时队列。当调用不在 Schedule 操作中的 Bus.Send 时,它工作正常。

The destination queue 'Ordering.Client.Timeouts@Z220-STATION1' could not be found. You may have misconfigured the destination for this kind of message (NServiceBus.Scheduling.Messages.ScheduledTask, NServiceBus.Core, Version=5.0.0.0, Culture=neutral, PublicKeyToken=9fc386479f8a226c) in the MessageEndpointMappings of the UnicastBusConfig section in your configuration file. It may also be the case that the given queue just hasn't been created yet, or has been deleted.

任何帮助都会很棒!

最佳答案

回答您的问题 - NServiceBus 调度通过向 future 发送超时消息来工作。当超时消息到达时,它会调用您的委托(delegate)并发送另一个超时消息。

这就是为什么你必须有一个超时队列。

NServiceBus 在开发配置文件中执行时自动创建队列。这不会发生在生产中。如果您使用 NServiceBus 托管,您应该运行 nservicebus.host.exe/install,或者如果您运行自托管,则应该像这样在您的代码中初始化安装程序:

Bus = Configure.With()
.Log4Net()
.DefaultBuilder()
.XmlSerializer()
.MsmqTransport()
.IsTransactional(false)
.PurgeOnStartup(false)
.UnicastBus()
.ImpersonateSender(false)
.CreateBus()
.Start(() => Configure.Instance.ForInstallationOn<Windows>().Install());

如所述here

最后一行启动总线并要求启动代码运行委托(delegate),您可以在其中强制安装程序运行。

关于c# - Nservicebus : Sending a message in a Schedule. 每个 Action ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28068346/

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