Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 消息队列和服务总线的消息粒度_C#_Message Queue_Servicebus - Fatal编程技术网

C# 消息队列和服务总线的消息粒度

C# 消息队列和服务总线的消息粒度,c#,message-queue,servicebus,C#,Message Queue,Servicebus,我正在开发一个应用程序,它可以在客户机上以相当紧密的循环生成数千条消息,并在服务器上进行处理。事件链类似于: 客户端处理项目,并将其放入本地队列 本地队列处理接收消息并调用web服务 Web服务在服务器上的服务总线中创建消息 服务总线将消息处理到数据库 其思想是所有通信都是异步的,因为web服务将有许多客户端。我知道MSMQ可以直接做到这一点,但我们并不总是在客户机上有这样的管理功能来设置安全性等 我的问题是关于每个阶段消息的粒度。最简单的方法是,在客户机上处理的每个项目都会生成一条客户机消息/

我正在开发一个应用程序,它可以在客户机上以相当紧密的循环生成数千条消息,并在服务器上进行处理。事件链类似于:

  • 客户端处理项目,并将其放入本地队列
  • 本地队列处理接收消息并调用web服务
  • Web服务在服务器上的服务总线中创建消息
  • 服务总线将消息处理到数据库
  • 其思想是所有通信都是异步的,因为web服务将有许多客户端。我知道MSMQ可以直接做到这一点,但我们并不总是在客户机上有这样的管理功能来设置安全性等

    我的问题是关于每个阶段消息的粒度。最简单的方法是,在客户机上处理的每个项目都会生成一条客户机消息/web服务调用/服务总线消息。这很好,但我知道如果可能的话,web服务调用最好是成批进行,除非在大粒度web服务DTO和数据库上的短时间运行事务之间存在权衡。这个特定的场景不需要“业务事务”,即处理所有或没有项目,我只是希望在消息大小、web服务调用数量和数据库事务之间实现最佳平衡

    有什么建议吗?

    聊天界面(即大量的消息)在将传入消息(以及在客户端上的回复)发送到正确的代码以处理消息时往往会有很高的开销(这将是每条消息的固定成本)。而大消息往往会在处理消息时使用资源

    此外,大量正在进行的web服务调用将意味着需要管理大量TCP/IP连接,并发性问题(包括数据库中的锁定)可能会成为一个问题

    但是,如果没有消息处理的一些细节,就很难做到具体,除了针对聊天界面的一般建议之外,因为固定的开销。

    聊天界面(即大量的消息)在发送传入消息(以及在客户端上的回复)时往往会有很高的开销以正确的代码处理消息(这将是每条消息的固定成本)。而大消息往往会在处理消息时使用资源

    此外,大量正在进行的web服务调用将意味着需要管理大量TCP/IP连接,并发性问题(包括数据库中的锁定)可能会成为一个问题


    但是,如果没有消息处理的一些细节,就很难做到具体,因为固定的开销,除了一般建议不要使用聊天界面之外。

    先测量,然后优化。除非你能做出一个粗略的估计,表明最简单的解决方案会产生不可接受的高负载,否则你可以尝试一下,建立良好的监控测量,看看它是如何执行和扩展的然后开始考虑批量数量和地点


    当然,这种方法要求您能够在部署后更改web服务接口,因此您需要一种版本控制方法来处理可能尚未重新设计的客户端,同时支持多个WS版本。但不管怎样,不考虑版本控制几乎总是将您困在次优接口中

    先测量,后优化。除非你能做出一个粗略的估计,表明最简单的解决方案会产生不可接受的高负载,否则你可以尝试一下,建立良好的监控测量,看看它是如何执行和扩展的然后开始考虑批量数量和地点


    当然,这种方法要求您能够在部署后更改web服务接口,因此您需要一种版本控制方法来处理可能尚未重新设计的客户端,同时支持多个WS版本。但不管怎样,不考虑版本控制几乎总是将您困在次优接口中

    提取消息队列

    并具有可交换的消息队列后端。通过这种方式,你可以测试许多后端,如果你选择了错误的后端或喜欢新出现的后端,你可以轻松地为自己纾困。消息传递的开销通常是打包和处理请求。不同的系统设计用于不同级别的流量和随时间变化的不同对称性

    如果你抽象出基本的特征,你可以根据你的需求变化,或者更准确地评估,来交换力学

    您还可以在收件人的压力发生变化时,在应用程序或消息路由的不同部分转换来自不同队列类型的消息,因为收件人的压力在更高级别上进行处理,例如1000:1/s与10:1/s


    祝您好运提取消息队列

    并具有可交换的消息队列后端。通过这种方式,你可以测试许多后端,如果你选择了错误的后端或喜欢新出现的后端,你可以轻松地为自己纾困。消息传递的开销通常是打包和处理请求。不同的系统设计用于不同级别的流量和随时间变化的不同对称性

    如果你抽象出基本的特征,你可以根据你的需求变化,或者更准确地评估,来交换力学

    您还可以在收件人的压力发生变化时,在应用程序或消息路由的不同部分转换来自不同队列类型的消息,因为收件人的压力在更高级别上进行处理,例如1000:1/s与10:1/s

    祝你好运