gpt4 book ai didi

spring - 理解、替换、配置和修改 Spring Rabbit (AMQP) 线程池 : A list of questions

转载 作者:行者123 更新时间:2023-12-04 10:17:55 25 4
gpt4 key购买 nike

我有一些关于 RabbitMQ + Spring 的简短问题,非常感谢您在这方面的帮助。

阅读文档后
这里 ( https://docs.spring.io/spring-amqp/reference/html/#connections )
这里 ( https://www.rabbitmq.com/api-guide.html )
Java + Spring 客户端的 api 似乎有一个名为 CachingConnectionFactory 的类。

事实:

  • CachingConnectionFactory 有两个 intrest 成员:PublisherConnectionFactory 和 RabbitConnectionFactory
  • CachingConnectionFactory 扩展了一个名为 AbstractConnectionFactory 的父类
  • CachingConnectionFactory 有一个名为 (ExecutorService channelsExecutor) 的成员。
  • AbstractConnectionFactory 有一个名为 (ExecutorService executorService) 的成员。
  • AbstractConnectionFactory 有一个名为 setExecutor(ExecutorService executorService) 的方法,它设置自己的 executorService 然后在它的 PublisherConnectionFactory 上调用相同的方法
  • RabbitConnectionFactory 有 4 (!) 不同的执行器:sharedExecutor、shutdownExecutor、heartbeatExecutor、topologyRecoveryExecutor;它还有一个名为 nioParams 的成员,其成员为 另一个 2 执行器:nioExecutor 和 connectionShutdownExecutor。此外,它还有一个名为 params 的方法,它接受另一个名为 consumerWorkServiceExecutor 的执行程序。即 7名执行人总共(!!)
  • 似乎 RabbitConnectionFactory 和此处的文档(再次 https://www.rabbitmq.com/api-guide.html)建议您在创建 channel 时可以传入任何自定义执行程序:rabbitConnectionFactory.newConnection(myExecutorService);

  • 问题:
  • CachingConnectionFactory、PublisherConnectionFactory 和 RabbitConnectionFactory 之间有什么区别和关系?
  • 为什么我们需要这么多不同的执行器池?它们之间有什么区别?
  • 这些类是否共享它们的线程池/执行器?
  • 当一个连接被打开时,它被分配给哪个线程池?
  • 当一个 channel 打开时,它分配给哪个线程池?
  • 发布和消费操作使用不同的线程池吗?
  • 我如何传入我自己的执行器实现或以其他方式配置上述每个执行器?
  • 合并/统一部分或全部 executor 是个好主意吗?

  • 提前致谢

    最佳答案

    我刚刚在rabbitmq-users上回复了你谷歌集团。

    我可以解决 Spring 问题。

    What is the difference, and the relationship, between CachingConnectionFactory, PublisherConnectionFactory and RabbitConnectionFactory?



    CCF是主要工厂;默认情况下。它的单个连接由所有组件共享(但它具有支持多个连接的缓存模式)。
    PCF 是一个可选的 CCF,可用于发布(当 RabbitTemplate.usePublisherConnection 为真时)。建议这样做,以允许消费者在发布者被阻止时继续消费。

    CCF executorService(如果存在)被传递到 RCF.newConnection()。
    channelsExecutor 是一个内部执行器,仅在启用发布者确认时使用;它用于延迟 channel 关闭请求,直到发布者确认到达(或超时)。

    Why do we need so many different executor pools? What is the difference between them all? Do these classes share their thread pools / executors?



    CCF executorService(如果存在)被传递到 RCF.newConnection() .

    When a connection is opened, to which thread pool is it allocated?



    CCF executorService(如果存在)被传递到 RCF.newConnection() .否则 amqp-client 使用它自己的执行程序。

    When a channel is opened, to which thread pool is it allocated? Do publish and consume operations use different thread pools?



    RabbitTemplate.usePublisherConnection是真的,PCF 有一个不同的执行者。

    How do I pass in my own executor implementation or otherwise configure, each of the aformentioned executors?



    有两个 CCF 执行器的 setter 方法。
    如果您想在 PCF 中使用不同的执行程序,请使用 CCF.getPublisherConnectionFactory()并调用它的 setter。

    Would it be a good idea to merge/unify some or all of the executors?

    关于spring - 理解、替换、配置和修改 Spring Rabbit (AMQP) 线程池 : A list of questions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60995009/

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