【问题标题】:the use of destination in spring cloud stream , with rabbitmqspring cloud stream中destination的使用,配合rabbitmq
【发布时间】:2017-06-22 02:24:58
【问题描述】:

当我配置application.yml时,我使用rabbitmq作为云流中的中间件

spring:
  cloud:
    stream:
      bindings:
        usertest:       #channelName 
          content-type: application/json
          group: testGroup
          destination: topic888 #destination,
          binder: rabbit1

我无法理解目的地的关键含义。 官方定义是:

目的地

绑定中间件上通道的目标目的地(例如,RabbitMQ 交换或 Kafka 主题)。如果通道绑定为消费者,它可以绑定到多个目的地,并且可以将目的地名称指定为逗号分隔的字符串值。如果未设置,则使用频道名称。

另外,我发现当消费者和生产者有不同的目的地时,它并没有阻止消费者消费。

【问题讨论】:

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


    【解决方案1】:

    destination 取决于活页夹类型。对于kafka来说,这是主题;对于 RabbitMQ,它是一种交换。

    生产者发布到交易所。

    消费者将队列绑定到交换器。匿名消费者绑定一个临时的自动删除队列,使用 group 的消费者绑定一个名为 topic888.testGroup 的队列(在您的情况下为 destination.group)。

    另外,我发现当消费者和生产者有不同的目的地时,它并没有阻止消费者消费。

    由于上面讨论的原因,我看不出这是怎么可能的,因为绑定器进行了配置。

    如果您手动将具有正确名称的队列绑定到生产者要发布到的不同交换器,则有可能。

    【讨论】:

    • 那么,这意味着消费者端的每个通道在rabbitmq中都会有不同的队列,因为我发现destination是一个exchange,group是一个将绑定到destination的队列,不是吗?
    • 在消费者端,目的地是交换和队列的组合;如果有group 属性,则队列是名称为dest.group 的永久队列;如果没有组,则队列具有随机名称并自动删除(当消费者停止时将其删除)。
    • Gary,如果是 RabbitMQ,有没有办法避免队列名称中出现destination.?我不明白为什么我应该在队列名称中重复 Exchange。
    • 不要对旧答案提出新问题;它不会帮助社区找到问题/答案。而是提出一个新问题。见the documentation for consumer properties。特别是queueNameGroupOnly - “如果为真,则从名称与组相同的队列中消费。否则队列名称为destination.group。这很有用,例如,当使用 Spring Cloud Stream 从现有的 RabbitMQ 队列中消费时。 "
    猜你喜欢
    • 2018-01-24
    • 2019-03-27
    • 2016-12-27
    • 2021-03-25
    • 1970-01-01
    • 2017-11-24
    • 1970-01-01
    • 1970-01-01
    • 2019-03-16
    相关资源
    最近更新 更多