混淆订阅操作的 AsyncAPI AMQP 绑定

Confusion on AsyncAPI AMQP binding for subscribe operation

我有一个在交换器上发布 rabbitmq 消息的服务器,所以我尝试为此创建以下异步 api 规范 -

asyncapi: 2.3.0
info:
  title: Hello World
  version: 1.0.0
  description: Get Hello World Messages
  contact: {}
servers:
  local:
    url: amqp://rabbitmq
    description: RabbitMQ
    protocol: amqp
    protocolVersion: 0.9.1
defaultContentType: application/json
channels:
  hellow_world:
    subscribe:
      operationId: HelloWorldSubscriber
      description: 
      message:
        $ref: '#/components/messages/HellowWorldEvent'
      bindings:
        amqp:
          ack: true
          cc: ["hello_world_routing_key"]
        bindingVersion: 0.2.0
    bindings:
      amqp:
        is: routingKey
        exchange:
          name: hello_world_exchange
          type: direct
          durable: true
          vhost: /
        bindingVersion: 0.2.0
components:
  messages: 
    HellowWorldEvent:
      payload:
        type: object
        properties: []

根据我的理解,这意味着 MyApp 将使用路由密钥 hello_world_routing_key

hello_world_exchange 交换上发布 helloworldevent 消息

问题-

参考 - https://github.com/asyncapi/bindings/tree/master/amqp

我看到您尚未批准任何回复作为解决方案。这仍然是一个问题吗?您是否使用 AsyncAPI 生成器生成代码存根?

如果是这样,生成器会创建一个 consumer/subscriber。如果您想要不同的 processing/business 逻辑,您将生成新的存根并配置它们监听的队列。队列是一个实现细节。我遇到了 AMQP 和 RabbitMQ 的 node.js 生成器的问题,所以我决定根据 Python 测试规范,看看是我还是生成器。

试试生成器,你可以试试我的要点:https://gist.github.com/adrianvolpe/27e9f02187c5b31247aaf947fa4a7360。我确实为 2.2.0 版做了这个,所以希望它对你有用。

我还用 Python 鼠兔库进行了测试,但是我没有为队列分配绑定。

我注意到在上面的规范中您将交换类型设置为直接。您可以通过直接和主题​​交换与多个消费者进行相同的绑定,但是您可能需要从 RabbitMQ 文档中引用的主题:

https://www.rabbitmq.com/tutorials/tutorial-five-python.html

Topic exchange is powerful and can behave like other exchanges.

When a queue is bound with "#" (hash) binding key - it will receive all the messages, regardless of the routing key - like in fanout exchange.

When special characters "*" (star) and "#" (hash) aren't used in bindings, the topic exchange will behave just like a direct one.

祝你好运!