我有一个服务器,它在一个交换机上发布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消息
问题-
- 使用者/订阅者如何定义将使用哪个队列来使用此消息?
- 我是否需要为订阅者定义新模式并在其中定义队列元素?
- 我可以在channel元素中定义另一个queue.**元素,但只能指定1个queue元素,如果有多个订阅者/消费者,那么我们如何为它们指定不同的队列呢?
1条答案
按热度按时间mm5n2pyu1#
我发现您还没有批准任何响应作为解决方案。这仍然是一个问题吗?您是否使用AsyncAPI生成器来生成代码存根?
如果是这样的话,生成器会创建一个消费者/订阅者。如果你想要不同的处理/业务逻辑,你会生成新的存根,并配置它们监听的队列。队列是一个实现细节。我在AMQP和RabbitMQ的node.js生成器上遇到了一个问题,所以我决定用Python测试这个规范,看看是我还是生成器。
试试发电机,你可以试试我的要点:https://gist.github.com/adrianvolpe/27e9f02187c5b31247aaf947fa4a7360。我确实为版本2.2.0做了这个,所以希望它对你有用。
我还用Python pika库做了一个测试,但是我没有给队列分配绑定。
我注意到在上面的规范中,您将交换类型设置为Direct。您可以使用Direct和Topic交换与多个消费者进行相同的绑定,但是您可能希望使用RabbitMQ文档中引用的Topic:
https://www.rabbitmq.com/tutorials/tutorial-five-python.html
主题交换是强大的,可以像其他交换一样。
当队列与“#”(散列)绑定键绑定时-它将接收所有消息,而不管路由键如何-就像扇出交换中一样。
当绑定中没有使用特殊字符“*”(星号)和“#”(散列)时,主题交换的行为就像直接交换一样。
祝你好运!