有没有办法在 RabbitMQ 队列、交换器、绑定等上进行“迁移”?

Dhe*_*rik 5 java migration spring rabbitmq spring-rabbit

我想知道是否有任何替代方法来创建/更改/删除exchangesqueues并且bindings不依赖框架(在我的例子中是Spring)来实现这一点及其限制。

问题

我经常需要更改Routing KeyQueueExchange名称,而这些框架不允许进行这种“精细”更改。因此,趋势是继续使用队列/键的原始名称,甚至原始设置(持久、DLQ 等)。将来,这最终会导致队列的组织混乱,因为您无法轻松地对其名称、配置进行适当的维护,最终无法在不同的交换机上重新组织它们等。

实际上,实现这一目标的唯一方法是手动从每个环境中删除它们,并让框架重新创建它们。或者移动临时队列的消息来执行相同的操作。

我想知道是否有任何替代方法可以控制这个问题,比如数据库迁移工具,如 Liquibase、Flyway 等。

与数据库问题做一个并行的情况,目前让 Spring 在 RabbitMQ 中创建所有内容在我看来类似于在生产数据库上保留hbm2ddlHibernate 选项。update

Gar*_*ell 2

您可以更改某些内容,但不能更改其他内容 - 但您必须以编程方式而不是声明方式进行。

您可以使用RabbitAdmin.declareBinding()将队列与不同的路由键(和/或交换)绑定,然后使用removeBinding()删除旧的。

您无法更改队列参数(DLQ 设置等)或持久性。

您可以使用 shovel 插件将消息从旧队列移动到新队列。