【问题标题】:Is there a way to do "migration" on RabbitMQ queues, exchanges, bindings, etc?有没有办法在 RabbitMQ 队列、交换、绑定等上进行“迁移”?
【发布时间】:2018-05-17 11:47:09
【问题描述】:

我想知道是否有任何替代方法可以创建/更改/删除exchangesqueuesbindings,而不依赖于框架(在我的情况下是 Spring)以及他的限制。

问题

我经常需要更改 Routing KeyQueueExchange 的名称,而这些框架不允许做这种“精炼”的改变。因此,趋势是继续使用队列/键的原始名称,甚至是原始设置(durable、DLQ 等)。在未来,这最终会混淆队列的组织,因为你不能轻易地对其名称、配置进行适当的维护,最终在不同的交易所重新组织它们等等。

实际上,实现这一点的唯一方法是手动将它们从每个环境中删除,然后让框架重新创建它们。或者移动临时队列的消息来做同样的事情。

我想知道是否有任何替代方法来控制这一点,例如用于数据库迁移的工具,如 Liquibase、Flyway 等。

以数据库问题为例,目前让 Spring 在 RabbitMQ 中创建所有内容在我看来类似于将 update 上的 hbm2ddl Hibernate 选项留在生产数据库上。

【问题讨论】:

    标签: java spring rabbitmq migration spring-rabbit


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2020-09-14
      • 1970-01-01
      • 1970-01-01
      • 2020-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-23
      • 2012-03-27
      相关资源
      最近更新 更多