编辑此页面

RabbitMQ 的 Dev Services

RabbitMQ 的开发服务会在开发模式和运行测试时自动启动 RabbitMQ 代理。因此,您无需手动启动代理。应用程序会自动配置。

启用/禁用 RabbitMQ 的开发服务

RabbitMQ 的开发服务会自动启用,除非

  • quarkus.rabbitmq.devservices.enabled 设置为 false

  • 配置了 rabbitmq-hostrabbitmq-port

  • 所有 Reactive Messaging RabbitMQ 通道都设置了 hostport 属性

RabbitMQ 的开发服务依赖 Docker 来启动代理。如果您的环境不支持 Docker,您必须手动启动代理,或连接到已运行的代理。您可以使用 rabbitmq-hostrabbitmq-portrabbitmq-usernamerabbitmq-password 属性配置代理访问。

共享消息代理

大多数情况下,您希望在应用程序之间共享代理。RabbitMQ 的开发服务为在开发模式下运行的多个 Quarkus 应用程序实现了一种服务发现机制,以共享单个代理。

RabbitMQ 的开发服务使用 quarkus-dev-service-rabbitmq 标签启动容器,该标签用于标识容器。

如果您需要多个(共享的)代理,您可以配置 quarkus.rabbitmq.devservices.service-name 属性并指示代理名称。它会查找具有相同值的容器,如果找不到,则启动一个新的容器。默认服务名称是 rabbitmq

默认情况下,共享在开发模式下启用,但在测试模式下禁用。您可以使用 quarkus.rabbitmq.devservices.shared=false 禁用共享。

设置端口

默认情况下,RabbitMQ 的开发服务会选择一个随机端口并配置应用程序。您可以通过配置 quarkus.rabbitmq.devservices.port 属性来设置端口。

配置镜像

RabbitMQ 的开发服务使用 https://hub.docker.com/_/rabbitmq 上提供的官方镜像。您可以使用 quarkus.rabbitmq.devservices.image-name 属性配置镜像和版本

quarkus.rabbitmq.devservices.image-name=rabbitmq:latest

访问管理 UI

默认情况下,RabbitMQ 的开发服务使用带有 management 标签的官方镜像。这意味着您可以使用 management 插件。您可以使用 Dev UI 来查找随机分配的 HTTP 端口,或使用 quarkus.rabbitmq.devservices.http-port 配置一个静态端口。

预定义的拓扑

RabbitMQ 的开发服务支持在代理启动时定义拓扑。您可以通过标准的 Quarkus 配置定义虚拟主机、交换机、队列和绑定。

定义虚拟主机

RabbitMQ 使用默认的虚拟主机 /。要定义其他 RabbitMQ 虚拟主机,请在 quarkus.rabbitmq.devservices.vhosts 键中提供虚拟主机的名称

quarkus.rabbitmq.devservices.vhosts=my-vhost-1,my-vhost-2

定义交换机

要定义 RabbitMQ 交换机,请在 quarkus.rabbitmq.devservices.exchanges 键后提供交换机的名称,后跟一个(或多个)交换机的属性

quarkus.rabbitmq.devservices.exchanges.my-exchange.type=topic            # defaults to 'direct'
quarkus.rabbitmq.devservices.exchanges.my-exchange.auto-delete=false     # defaults to 'false'
quarkus.rabbitmq.devservices.exchanges.my-exchange.durable=true          # defaults to 'false'
quarkus.rabbitmq.devservices.exchanges.my-exchange.vhost=my-vhost        # defaults to '/'

此外,可以使用 arguments 键为交换机的定义提供任何其他参数

quarkus.rabbitmq.devservices.exchanges.my-exchange.arguments.alternate-exchange=another-exchange

定义队列

要定义 RabbitMQ 队列,请在 quarkus.rabbitmq.devservices.queues 键后提供队列的名称,后跟一个(或多个)队列的属性

quarkus.rabbitmq.devservices.queues.my-queue.auto-delete=false          # defaults to 'false'
quarkus.rabbitmq.devservices.queues.my-queue.durable=true               # defaults to 'false'
quarkus.rabbitmq.devservices.queues.my-queue.vhost=my-vhost             # defaults to '/'

此外,可以使用 arguments 键为队列的定义提供任何其他参数

quarkus.rabbitmq.devservices.queues.my-queue.arguments.x-dead-letter-exchange=another-exchange

定义绑定

要定义 RabbitMQ 绑定,请在 quarkus.rabbitmq.devservices.bindings 键后提供绑定的名称,后跟一个(或多个)绑定的属性

quarkus.rabbitmq.devservices.bindings.a-binding.source=my-exchange      # defaults to name of binding
quarkus.rabbitmq.devservices.bindings.a-binding.routing-key=some-key    # defaults to '#'
quarkus.rabbitmq.devservices.bindings.a-binding.destination=my-queue    # defaults to name of binding
quarkus.rabbitmq.devservices.bindings.a-binding.destination-type=queue  # defaults to 'queue'
quarkus.rabbitmq.devservices.bindings.a-binding.vhost=my-vhost          # defaults to '/'
绑定的名称仅用于开发服务配置的目的,而不是 RabbitMQ 中定义的绑定的一部分。

此外,可以使用 arguments 键为绑定的定义提供任何其他参数

quarkus.rabbitmq.devservices.bindings.a-binding.arguments.non-std-option=value

配置参考

构建时固定的配置属性 - 所有其他配置属性都可以在运行时覆盖

配置属性

类型

默认

是否已显式启用或禁用 RabbitMQ 的开发服务。开发服务通常默认启用,除非存在现有配置。对于 RabbitMQ,开发服务会启动代理,除非设置了 rabbitmq-hostrabbitmq-port,或者所有 Reactive Messaging RabbitMQ 通道都配置了 hostport

环境变量: QUARKUS_RABBITMQ_DEVSERVICES_ENABLED

显示更多

布尔值

开发服务将侦听的可选固定端口。

如果未定义,将随机选择端口。

环境变量: QUARKUS_RABBITMQ_DEVSERVICES_PORT

显示更多

整数

RabbitMQ 管理插件的可选固定端口。

如果未定义,将随机选择端口。

环境变量: QUARKUS_RABBITMQ_DEVSERVICES_HTTP_PORT

显示更多

整数

要使用的镜像。请注意,仅支持官方 RabbitMQ 镜像。具体来说,镜像仓库必须以 rabbitmq 结尾。

环境变量: QUARKUS_RABBITMQ_DEVSERVICES_IMAGE_NAME

显示更多

字符串

rabbitmq:3.12-management

指示由 Quarkus 开发服务管理的 RabbitMQ 代理是否共享。共享时,Quarkus 会查找使用基于标签的服务发现运行的容器。如果找到匹配的容器,则使用它,因此不会启动第二个容器。否则,RabbitMQ 的开发服务会启动一个新的容器。

发现使用 quarkus-dev-service-rabbitmq 标签。该值使用 service-name 属性进行配置。

容器共享仅在开发模式下使用。

环境变量: QUARKUS_RABBITMQ_DEVSERVICES_SHARED

显示更多

布尔值

true

附加到启动的容器的 quarkus-dev-service-rabbitmq 标签的值。当 shared 设置为 true 时,使用此属性。在这种情况下,在启动容器之前,RabbitMQ 的开发服务会查找 quarkus-dev-service-rabbitmq 标签设置为配置值的容器。如果找到,它将使用此容器而不是启动一个新的容器。否则,它将启动一个 quarkus-dev-service-rabbitmq 标签设置为指定值的新容器。

当您需要多个共享 RabbitMQ 代理时,使用此属性。

环境变量: QUARKUS_RABBITMQ_DEVSERVICES_SERVICE_NAME

显示更多

字符串

rabbitmq

交换机的类型:direct、topic、headers、fanout 等。

环境变量: QUARKUS_RABBITMQ_DEVSERVICES_EXCHANGES__EXCHANGE_NAME__TYPE

显示更多

字符串

direct

当所有队列都完成使用交换机时,是否应删除交换机?

环境变量: QUARKUS_RABBITMQ_DEVSERVICES_EXCHANGES__EXCHANGE_NAME__AUTO_DELETE

显示更多

布尔值

false

交换机在重启后是否应保留?

环境变量: QUARKUS_RABBITMQ_DEVSERVICES_EXCHANGES__EXCHANGE_NAME__DURABLE

显示更多

布尔值

false

交换机应与哪个虚拟主机关联?

环境变量: QUARKUS_RABBITMQ_DEVSERVICES_EXCHANGES__EXCHANGE_NAME__VHOST

显示更多

字符串

/

交换机定义的额外参数。

环境变量: QUARKUS_RABBITMQ_DEVSERVICES_EXCHANGES__EXCHANGE_NAME__ARGUMENTS__ARGUMENT_NAME_

显示更多

Map<String,String>

当所有消费者都完成使用队列时,是否应删除队列?

环境变量: QUARKUS_RABBITMQ_DEVSERVICES_QUEUES__QUEUE_NAME__AUTO_DELETE

显示更多

布尔值

false

队列在重启后是否应保留?

环境变量: QUARKUS_RABBITMQ_DEVSERVICES_QUEUES__QUEUE_NAME__DURABLE

显示更多

布尔值

false

队列应与哪个虚拟主机关联?

环境变量: QUARKUS_RABBITMQ_DEVSERVICES_QUEUES__QUEUE_NAME__VHOST

显示更多

字符串

/

队列定义的额外参数。

环境变量: QUARKUS_RABBITMQ_DEVSERVICES_QUEUES__QUEUE_NAME__ARGUMENTS__ARGUMENT_NAME_

显示更多

Map<String,String>

要绑定的源交换机。默认为绑定实例的名称。

环境变量: QUARKUS_RABBITMQ_DEVSERVICES_BINDINGS__BINDING_NAME__SOURCE

显示更多

字符串

源交换机的路由键规范。

环境变量: QUARKUS_RABBITMQ_DEVSERVICES_BINDINGS__BINDING_NAME__ROUTING_KEY

显示更多

字符串

#

要绑定的目标交换机或队列。默认为绑定实例的名称。

环境变量: QUARKUS_RABBITMQ_DEVSERVICES_BINDINGS__BINDING_NAME__DESTINATION

显示更多

字符串

绑定的目标类型:queue、exchange 等。

环境变量: QUARKUS_RABBITMQ_DEVSERVICES_BINDINGS__BINDING_NAME__DESTINATION_TYPE

显示更多

字符串

queue

绑定应与哪个虚拟主机关联?

环境变量: QUARKUS_RABBITMQ_DEVSERVICES_BINDINGS__BINDING_NAME__VHOST

显示更多

字符串

/

绑定定义的额外参数。

环境变量: QUARKUS_RABBITMQ_DEVSERVICES_BINDINGS__BINDING_NAME__ARGUMENTS__ARGUMENT_NAME_

显示更多

Map<String,String>

启动 RabbitMQ 代理后应预定义的虚拟主机。

环境变量: QUARKUS_RABBITMQ_DEVSERVICES_VHOSTS

显示更多

字符串列表

传递给容器的环境变量。

环境变量: QUARKUS_RABBITMQ_DEVSERVICES_CONTAINER_ENV__ENVIRONMENT_VARIABLE_NAME_

显示更多

Map<String,String>

相关内容