RabbitMQ 的 Dev Services
RabbitMQ 的开发服务会在开发模式和运行测试时自动启动 RabbitMQ 代理。因此,您无需手动启动代理。应用程序会自动配置。
启用/禁用 RabbitMQ 的开发服务
RabbitMQ 的开发服务会自动启用,除非
-
quarkus.rabbitmq.devservices.enabled
设置为false
-
配置了
rabbitmq-host
或rabbitmq-port
-
所有 Reactive Messaging RabbitMQ 通道都设置了
host
或port
属性
RabbitMQ 的开发服务依赖 Docker 来启动代理。如果您的环境不支持 Docker,您必须手动启动代理,或连接到已运行的代理。您可以使用 rabbitmq-host
、rabbitmq-port
、rabbitmq-username
和 rabbitmq-password
属性配置代理访问。
共享消息代理
大多数情况下,您希望在应用程序之间共享代理。RabbitMQ 的开发服务为在开发模式下运行的多个 Quarkus 应用程序实现了一种服务发现机制,以共享单个代理。
RabbitMQ 的开发服务使用 quarkus-dev-service-rabbitmq 标签启动容器,该标签用于标识容器。 |
如果您需要多个(共享的)代理,您可以配置 quarkus.rabbitmq.devservices.service-name
属性并指示代理名称。它会查找具有相同值的容器,如果找不到,则启动一个新的容器。默认服务名称是 rabbitmq
。
默认情况下,共享在开发模式下启用,但在测试模式下禁用。您可以使用 quarkus.rabbitmq.devservices.shared=false
禁用共享。
配置镜像
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 管理插件的可选固定端口。 如果未定义,将随机选择端口。 环境变量: 显示更多 |
整数 |
|
要使用的镜像。请注意,仅支持官方 RabbitMQ 镜像。具体来说,镜像仓库必须以 环境变量: 显示更多 |
字符串 |
|
指示由 Quarkus 开发服务管理的 RabbitMQ 代理是否共享。共享时,Quarkus 会查找使用基于标签的服务发现运行的容器。如果找到匹配的容器,则使用它,因此不会启动第二个容器。否则,RabbitMQ 的开发服务会启动一个新的容器。 发现使用 容器共享仅在开发模式下使用。 环境变量: 显示更多 |
布尔值 |
|
附加到启动的容器的 当您需要多个共享 RabbitMQ 代理时,使用此属性。 环境变量: 显示更多 |
字符串 |
|
交换机的类型:direct、topic、headers、fanout 等。 环境变量: 显示更多 |
字符串 |
|
当所有队列都完成使用交换机时,是否应删除交换机? 环境变量: 显示更多 |
布尔值 |
|
交换机在重启后是否应保留? 环境变量: 显示更多 |
布尔值 |
|
交换机应与哪个虚拟主机关联? 环境变量: 显示更多 |
字符串 |
|
交换机定义的额外参数。 环境变量: 显示更多 |
Map<String,String> |
|
当所有消费者都完成使用队列时,是否应删除队列? 环境变量: 显示更多 |
布尔值 |
|
队列在重启后是否应保留? 环境变量: 显示更多 |
布尔值 |
|
队列应与哪个虚拟主机关联? 环境变量: 显示更多 |
字符串 |
|
队列定义的额外参数。 环境变量: 显示更多 |
Map<String,String> |
|
要绑定的源交换机。默认为绑定实例的名称。 环境变量: 显示更多 |
字符串 |
|
源交换机的路由键规范。 环境变量: 显示更多 |
字符串 |
|
要绑定的目标交换机或队列。默认为绑定实例的名称。 环境变量: 显示更多 |
字符串 |
|
绑定的目标类型:queue、exchange 等。 环境变量: 显示更多 |
字符串 |
|
绑定应与哪个虚拟主机关联? 环境变量: 显示更多 |
字符串 |
|
绑定定义的额外参数。 环境变量: 显示更多 |
Map<String,String> |
|
启动 RabbitMQ 代理后应预定义的虚拟主机。 环境变量: 显示更多 |
字符串列表 |
|
传递给容器的环境变量。 环境变量: 显示更多 |
Map<String,String> |