理解、替换、配置和修改SpringRabbit(AMQP)线程池:问题列表

理解、替换、配置和修改SpringRabbit(AMQP)线程池:问题列表,spring,rabbitmq,spring-amqp,spring-rabbit,Spring,Rabbitmq,Spring Amqp,Spring Rabbit,我有几个关于RabbitMQ+Spring的简短问题,非常感谢您在这件事上的帮助 阅读文档后 这里() 和这里() Java+Spring客户端的api似乎有一个名为CachingConnectionFactory的类 事实: CachingConnectionFactory有两个intrest成员:PublisherConnectionFactory和RabbitConnectionFactory CachingConnectionFactory扩展了名为AbstractConnectionF

我有几个关于RabbitMQ+Spring的简短问题,非常感谢您在这件事上的帮助

阅读文档后
这里()
这里()
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、Heartbeat Executor、topologyRecoveryExecutor;它还有一个名为nioParams的成员,还有另外两个执行器:nioExecutor和connectionShutdownExecutor。此外,它还有一个名为params的方法,接受另一个名为consumerWorkServiceExecutor的执行器。总共有7名执行人(!!)

  • RabbitConnectionFactory和此处的文档似乎建议您在创建通道时可以传入任何自定义执行器:RabbitConnectionFactory.newConnection(myExecutorService)

  • 问题:

  • CachingConnectionFactory、PublisherConnectionFactory和RabbitConnectionFactory之间的区别和关系是什么

  • 为什么我们需要这么多不同的执行人池?它们之间有什么区别

  • 这些类是否共享它们的线程池/执行器

  • 当连接打开时,它被分配到哪个线程池

  • 当通道打开时,它分配给哪个线程池

  • 发布和使用操作是否使用不同的线程池

  • 如何传入自己的执行器实现或以其他方式配置上述每个执行器

  • 合并/统一部分或全部执行人是个好主意吗


  • 提前感谢

    我刚刚在
    rabbitmq用户
    谷歌群上回答了您的问题

    我可以回答春天的问题

    CachingConnectionFactory、PublisherConnectionFactory和RabbitConnectionFactory之间的区别和关系是什么

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

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

    为什么我们需要这么多不同的执行人池? 它们之间有什么区别? 这些类是否共享它们的线程池/执行器

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

    当连接打开时,它被分配到哪个线程池

    CCF executorService(如果存在)被传递到
    RCF.newConnection()
    。否则,amqp客户端将使用自己的执行器

    当通道打开时,它分配给哪个线程池? 发布和使用操作是否使用不同的线程池

    如果
    rabbitmplate.usePublisherConnection
    为真,并且PCF具有不同的执行器

    如何传入自己的执行器实现或以其他方式配置上述每个执行器

    有两个CCF执行器的setter方法。 如果希望在PCF中使用不同的执行器,请使用
    CCF.getPublisherConnectionFactory()
    并调用其setter

    合并/统一部分或全部执行人是个好主意吗


    迟做总比不做好,但我终于有了足够的声誉来接受你的回答。谢谢你的帮助!