【问题标题】:Spring Cloud Streaming - Separate Connection for Producer & ConsumerSpring Cloud Streaming - 生产者和消费者的单独连接
【发布时间】:2018-03-16 03:55:55
【问题描述】:

我有一个使用 RabbitMQ 的 Spring Cloud Streaming 转换器应用程序。它正在从 Rabbit 队列中读取数据,进行一些转换,然后写入 Rabbit 交换器。我已将我的应用程序部署到 PCF 并绑定到 Rabbit 服务。

这很好用,但现在我需要一个单独的连接来使用和生成消息。 (我想使用一个连接从 Rabbit 队列中读取,并使用不同的连接写入 Rabbit 交换)。我将如何配置它?是否可以将我的应用程序绑定到 2 个不同的 Rabbit 服务,其中 1 个作为生产者,1 个作为消费者?

【问题讨论】:

    标签: spring spring-cloud-stream spring-rabbit


    【解决方案1】:

    嗯,从 1.3 版本开始,Rabbit Binder 确实为生产者创建了一个单独的 ConnectionFactoryhttps://docs.spring.io/spring-cloud-stream/docs/Ditmars.RELEASE/reference/htmlsingle/#_rabbitmq_binder

    从 1.3 版开始,RabbitMessageChannelBinder 为非事务性生产者创建一个内部 ConnectionFactory 副本,以避免在共享时出现死锁,缓存连接因 Broker 上的内存警报而被阻塞。

    所以,升级到 Spring Cloud Stream Ditmars 后,也许这对您来说已经足够了。

    更新

    我将如何使用不同的连接属性配置此内部 ConnectionFactory 副本?

    不,那是另一回事。你需要的叫multi-binder支持:https://docs.spring.io/spring-cloud-stream/docs/Ditmars.RELEASE/reference/htmlsingle/#multiple-binders

    你应该为不同的连接工厂声明几个块:

    spring.cloud.stream.bindings.input.binder=rabbit1
    spring.cloud.stream.bindings.output.binder=rabbit2
    
    ...
    
    spring:
      cloud:
        stream:
          bindings:
            input:
              destination: foo
              binder: rabbit1
            output:
              destination: bar
              binder: rabbit2
          binders:
            rabbit1:
              type: rabbit
              environment:
                spring:
                  rabbitmq:
                    host: <host1>
            rabbit2:
              type: rabbit
              environment:
                spring:
                  rabbitmq:
                    host: <host2>
    

    【讨论】:

    • 我将如何使用不同的连接属性配置这个内部 ConnectionFactory 副本?
    猜你喜欢
    • 2013-11-18
    • 1970-01-01
    • 2018-12-18
    • 1970-01-01
    • 2017-07-13
    • 2011-11-08
    • 2017-02-24
    • 2015-04-05
    • 1970-01-01
    相关资源
    最近更新 更多