【问题标题】:Concurrency (thread executor) for OUTPUT channels for Spring Cloud StreamSpring Cloud Stream 的 OUTPUT 通道的并发(线程执行器)
【发布时间】:2018-10-04 17:01:32
【问题描述】:

有没有办法为spring cloud streams中的输出通道配置并发?

例如,我正在考虑如何设置线程执行器的方法,用于输出消息通道或通过配置属性,如果这是一个好主意,在 spring 云流服务的情况下。

我还没有找到办法,这是否意味着 Spring Stream Cloud 可以很好地为我们管理并发性(线程数、扩展/缩减策略),最好不要碰它部分 ?

提前非常感谢, 西蒙

【问题讨论】:

  • 你想达到什么目的? rabbitmq 和 kafka(主要的 binder)发布都是异步的(也就是非常快)。
  • 这个想法是找出并发是如何工作的(线程策略等......),如果我们愿意的话,我们是否有能力管理该并发。是否有一个来源可以让我看到输出通道的并发性如何工作以及如何配置,如果我们愿意的话?谢谢

标签: java spring concurrency spring-cloud-stream


【解决方案1】:

生产者端没有内置并发,因为不需要它,因为使用标准绑定器,发送是异步的,并且在任何情况下,并发都在输入端进行管理。

如果您想进行实验,请在您的应用程序中使用任务执行器;如果您发现将其添加到框架的令人信服的案例,请打开一个 github 问题,要求提供新功能。

【讨论】:

  • 我们实际上已经将配置从异步更改为同步,因为对于我们的特定用例,我们有一个 REST 控制器,它使用一个 POST 请求并将有效负载发送到 Kafka。因此,我们希望在 Kafka 不可用的情况下返回 404/500 响应。这是通过将适当的活页夹的配置更改为“同步”来实现的。我的理解是,这不应该是并发问题,因为消息执行将在与请求关联的相应 HTTP 线程中完成。这是一个有效的假设吗?
  • 是的;这通常是正确的 - 即使对于Processor,并发性也由消费者方控制。
  • 非常感谢您的回复,并且绝对清楚,因为我们正在使用具有默认 200 个 HTTP 线程的 Spring Boot 应用程序 - 从您的回复中,我们了解到每个线程都将单独交谈到输出消息通道而不阻塞应用程序中的任何其他线程 - 正确吗?
  • 没错,是的;并发由 Web 容器(Tomcat 等)控制/配置。
  • 非常感谢您,一如既往地感谢您的帮助和及时回复
猜你喜欢
  • 1970-01-01
  • 2017-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-21
  • 1970-01-01
相关资源
最近更新 更多