【发布时间】:2021-05-21 04:32:46
【问题描述】:
我是 mule 新手,想了解最大并发的工作原理?我知道这是为了确定可以同时接收多少个请求。但是我有一个问题,如果我有大量的应用程序传入请求,如果我设置了最大并发数,后续请求是否会在队列中,或者它会出错或数据丢失?
例如,假设我的应用程序收到大约 10,000 个请求,并且我将最大并发设置为 1000。那么其他 9000 将在队列中或有可能丢失数据?
另外,可以为流设置的理想最大并发数是多少?
提前致谢。
【问题讨论】:
我是 mule 新手,想了解最大并发的工作原理?我知道这是为了确定可以同时接收多少个请求。但是我有一个问题,如果我有大量的应用程序传入请求,如果我设置了最大并发数,后续请求是否会在队列中,或者它会出错或数据丢失?
例如,假设我的应用程序收到大约 10,000 个请求,并且我将最大并发设置为 1000。那么其他 9000 将在队列中或有可能丢失数据?
另外,可以为流设置的理想最大并发数是多少?
提前致谢。
【问题讨论】:
我不确定您指的是哪个队列。在 Mule 4 中,请求没有排队。如果流设置了 maxConcurrency,任何超过该数量的并发请求都将失败并出现错误。如果这导致数据丢失可能取决于您的应用程序在做什么。 maxConcurrency 只是限制并发性,您无需考虑实现或线程数。
如果您的应用程序正在从队列(即 JMS 或 VM 队列)中读取,预计它不能同时读取超过 maxConcurrency 的消息,因此其他消息应保留在队列中并且不会触发错误。
请注意,maxConcurrency 并不能保证应用程序实际上可以处理尽可能多的并发请求。如果将其设置为 1000,则必须确保应用程序有足够的资源来处理那么多并发请求。了解如何调整大小的唯一方法是在与实际预期使用情况相似的条件下执行负载测试,并验证由于资源不足而开始出现错误的次数。
一种特殊情况是您只需要一个特定的数字。例如,从 maxConcurrency = 1 的队列中读取的流一次只处理一条消息。
【讨论】: