Nservicebus 使用NService总线发布大量消息

Nservicebus 使用NService总线发布大量消息,nservicebus,azureservicebus,Nservicebus,Azureservicebus,我想使用n服务总线发布大量消息。 我发现了一个重载发布方法,它将消息列表作为参数。 当我尝试使用它时,它显示以下错误 var message= new Message { Id = id, Timestamp = DateTime.SpecifyKind(DateTime.Now, DateTimeKin

我想使用n服务总线发布大量消息。 我发现了一个重载发布方法,它将消息列表作为参数。 当我尝试使用它时,它显示以下错误

  var message= new Message
                    {                           
                        Id = id,
                        Timestamp = DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Local),
                        PublishingStartTimestamp = DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Local)

                    };

                    bus.Publish(new[] { message, message});
错误:“NServiceBus.IBus.Publish(params T[])”已过时:“已删除以减少复杂性和API混乱。”。有关更多信息,请参阅。将在5.0.0版中删除。”

发布大量消息的替代方案是什么。 我的任务是每秒发布600个事件。 有人能帮忙吗


提前谢谢

NServicebus支持异步发布消息:

假设您在接收消息上下文之外,您可以收集任务列表中的所有发布任务,然后让这些任务与WhenAll异步运行

还要确保您没有达到azure服务总线每秒最大消息数的限制

更新
有关完整答案,请参阅Ramon Smit的答案。

NServicebus支持异步发布消息:

假设您在接收消息上下文之外,您可以收集任务列表中的所有发布任务,然后让这些任务与WhenAll异步运行

还要确保您没有达到azure服务总线每秒最大消息数的限制

更新 有关完整答案,请参阅Ramon Smit的答案。

大量 我不确定你的用例是什么。如果消息流是一致的,那么对于单个端点,600 msg/s转换为每天将近5200万条消息

用例 我们会对您的用例感兴趣,我们可以在我们的谷歌小组中公开讨论

我们也可以通过以下方式私下联系我们:support@particular.net

作为单个或单个消息接收 如果您发送了这600条消息,是否希望在接收端将其视为一条消息?我问这个问题的原因是,问题中的API就是这样做的。它创建一个包含所有这些消息的信封。在传输上,您将看到一条物理消息。在接收端,所有消息都将作为单个接收操作进行处理

如果这是您想要的行为,则必须创建一条包含集合(数组/列表)的消息,并将所有这些消息片段放入其中

这一策略的好处在于,您在合同中使行为更加明确

var message = new ParentMessage();
for(int i=0;i<600;i++) message.Children.Add(new ChildFragment());
Bus.Publish(message);
演出 描述中使用的API是NServiceBus V5或更早版本。在V6 Azure中,服务总线性能有了显著提高

有很多变量可以调整以提高性能

var tasks = new List<Task>();
for(int i=0;i<600;i++) tasks.Add(messageSession.Publish(new MyEvent()));
await Task.WhenAll(tasks).ConfigureAwait(false);;
在V6中,对于单个端点实例,每秒发送/接收数千条消息应该不会有任何问题。

High volume 我不确定你的用例是什么。如果消息流是一致的,那么对于单个端点,600 msg/s转换为每天将近5200万条消息

用例 我们会对您的用例感兴趣,我们可以在我们的谷歌小组中公开讨论

我们也可以通过以下方式私下联系我们:support@particular.net

作为单个或单个消息接收 如果您发送了这600条消息,是否希望在接收端将其视为一条消息?我问这个问题的原因是,问题中的API就是这样做的。它创建一个包含所有这些消息的信封。在传输上,您将看到一条物理消息。在接收端,所有消息都将作为单个接收操作进行处理

如果这是您想要的行为,则必须创建一条包含集合(数组/列表)的消息,并将所有这些消息片段放入其中

这一策略的好处在于,您在合同中使行为更加明确

var message = new ParentMessage();
for(int i=0;i<600;i++) message.Children.Add(new ChildFragment());
Bus.Publish(message);
演出 描述中使用的API是NServiceBus V5或更早版本。在V6 Azure中,服务总线性能有了显著提高

有很多变量可以调整以提高性能

var tasks = new List<Task>();
for(int i=0;i<600;i++) tasks.Add(messageSession.Publish(new MyEvent()));
await Task.WhenAll(tasks).ConfigureAwait(false);;


在V6中,对于单个端点实例,每秒发送/接收数千条消息应该没有问题。

您好,我找不到任何名为PublishAsync的方法。我有最新版本的N服务总线。你能帮我处理NSB 6发布是异步的吗?你让我很开心。谢谢你,伙计!尽管V6是异步的,但只有在调用了所有处理程序和Saga之后,消息才会被推送到传输中。@Ramon,你能澄清一下这是什么意思吗?嗨,我找不到任何名为PublishAsync的方法。我有最新版本的N服务总线。你能帮我处理NSB 6发布是异步的吗?你让我很开心。谢谢你,伙计!尽管V6是异步的,但只有在调用了所有处理程序和saga之后,消息才会被推送到传输。@Ramon,您能澄清一下这是什么意思吗?如果这是在处理程序或saga中完成的,那么在传入消息上下文中完成的?请联系我们了解您的用例。我们对讨论它非常感兴趣。如果这是在处理程序或saga中进行的,那么在传入消息上下文中进行的?请就您的用例与我们联系。我们非常有兴趣讨论它。嗨,我们需要这个工具来对我们的工作者角色执行负载测试。我们在10分钟内每秒生成600个消息,并测试API的行为。谢谢你的盛情款待explanation@mangeshKulkarni如果您想构建一个用于负载测试的客户机,那么请看一下下面的项目,例如,这将为数据播种,并可能帮助您尽可能快地将数据推送到队列中。还可以查看各种传输配置,以调整传输以获得最佳性能。@RamonSmits我自由地编辑了
Childs
Childs
。您好,我们需要这个工具来执行