2013-05-30 29 views
0

我有一个项目使用Spring Integration + RabbitMQ。我们仍处于早期开发阶段,所以我们正在迅速改变我们的集成架构的拓扑结构,包括RabbitMQ配置。自动更改RabbitMQ config

我们也试图通过免提部署来遵循持续部署。

我在我的spring配置文件中声明了一个<rabbit:admin />元素,这很好地处理添加新的交换或队列。

但是,我发现它在部署更改现有交换/队列配置的更新时失败。

近日,一对夫妇的部署已经失败,因为:

  • 我们交换了直接队列的扇出交换
  • 我们改变了TTL宣布的消息有直接的队列。

在这两种情况下,现有配置都需要更改,而不是仅创建新实例。这些更新未应用,导致启动失败。

对于这两个问题,修复很简单 - 删除违规资源,重新启动应用程序,然后使用<rabbit:admin />开始替换正确的定义。

但是,在生产系统中,我们不能这样做。另外,目前这不是我们部署的脚本,因此连续部署更加麻烦。

对于可以处理RabbitMQ拓扑更新的持续部署策略,有哪些工具或策略可用?

回答

0

即将到来的1.2版本(目前为里程碑1 - 1.2.0.M1)现在对RabbitAdminan option登录配置问题(而不是无法初始化)ignore-declaration-exceptions

它不会更改现有配置,但它会允许应用程序在记录警告时进行初始化。

+0

谢谢 - 这当然有帮助,但我仍然很好奇人们如何管理这些东西?我不能成为唯一一个试图用RabbitMQ进行连续部署的人。有什么建议么? –

+0

我建议你问他们的名单上的兔子专家https://lists.rabbitmq.com/cgi-bin/mailman/listinfo/rabbitmq-discuss –

1

我听说过的做法是创建一个新的交换并将新的绑定添加到现有的队列中。在这种情况下,您可以将发布者移到下一个交易所,而消费者只需从同一队列中消费。一旦所有人都移动了,你可以放弃旧队列,可能会重新创建并移回原来的名字。

由于队列更改更加困难,因为如果您使用新设置创建新队列并绑定到相同交换机,您可能会收到重复消息。如果这是与新交换(与现有配置相同的配置)协同完成的,那么您可以防止重复的消息。

对于无法维持已删除队列的任何关键系统,我更倾向于创建新群集并将所有客户端移动到新的正确配置的群集。您可以拆分现有集群并修复一个节点,而不是创建新集群,擦除旧集群并将其加入新节点。

我已经开始管理Chef中的交换/队列配置,以便这个过程更容易一些,不需要注意发布者和消费者连接到新节点的顺序。

这些是我见过/听说过的最好的。在这方面,向后不兼容的AMQP更改与DB迁移类似。添加兼容的更改很容易自动化,但不兼容的更改需要谨慎。