【问题标题】:Octopus - deploying multiple copies of same serviceOctopus - 部署同一服务的多个副本
【发布时间】:2015-12-22 16:03:47
【问题描述】:

我有一个用于 NServiceBus 消费者的 Octopus 部署。直到最近,只有一个队列可以消费。现在,我们正在尝试将不同类型的消息放在不同的队列中。目前我们已将其分成 3 个队列,但这个数字未来可能会增加。

现在的计划是在 3 个不同的文件夹中以 3 个不同的名称安装 NSB 消费者服务 3 次。 3 个部署的唯一区别是 app.config 设置:

<add key="NsbConsumeQueue" value="RedQueue" />

所以我们将有一个Red 服务、一个Green 服务和一个Blue 服务,并且每个服务都将被配置为使用适当的队列。

在 Octopus 中部署这 3 项服务的最佳方式是什么?我的理想是在某处声明某种服务列表,例如

ServiceName    QueueName
-----------    ---------
RedService     RedQueue
GreenService   GreenQueue
BlueService    BlueQueue

并遍历这些服务,将每个服务部署在自己的文件夹中,并将app.config 中的NsbConsumeQueue 的值替换为适当的值。我不认为这可以使用变量来完成,这会留下 PowerShell。

知道如何编写一个可以做到这一点的 PS 脚本吗?

【问题讨论】:

  • 嗨 Saul :) 您能否提供更多背景信息,为什么您需要 3 个单独的队列用于相同的消息类型?您是否尝试优先处理消息?
  • 它们是不同的消息类型。很高兴在这里见到你@TylerDay!你是在跟踪我,还是只是碰巧看到了我的帖子? :)
  • 碰巧偶然发现了这个。我大约一年前开始使用 NSB。我不知道章鱼部署,但我认为你可能不得不走 powershell 路线。这就是我一直在为我的部署做的事情。
  • 出于好奇,您为什么对三个不同的端点使用相同的“消费者”?对于可以托管多个 AC 的每个端点,我有一个不同的端点(+ 项目),具体取决于我在该端点中托管哪个服务的哪个 AC。我可以看到这两种方法的价值,只是好奇你为什么选择走这条路。

标签: powershell nservicebus octopus-deploy


【解决方案1】:

在我以前的雇主,我们使用以下脚本从 Octopus 进行部署: http://www.layerstack.net/blog/posts/deploying-nservicebus-with-octopus-deploy

将两个 Powershell 脚本添加到包含 NServiceBus 主机的项目中。一定要override the host identifier 否则 ServicePulse 会发疯的,因为由于 Octopus,每个部署都有自己的文件夹。

但正如 cmets 中所述,请确保您出于正确的原因拆分端点。我们也有/有至少 4 个服务,但那是因为我们有一个逻辑分离。例如,我们有一个财务服务,所有财务消息都发送到该服务。和一个销售服务,所有销售服务都去。这遵循 DDD 有界上下文原则,并且是有原因的。我希望您的服务实际上不被称为红色、绿色和蓝色! :)

【讨论】:

  • 谢谢,这很有用!几个要求:(1)您能否插入链接页面的重要摘录?随着时间的推移,超链接会被破坏,我们希望 SO 在未来几十年对未来的程序员有用。 (2) 如果您可以添加用于定义服务名称/队列名称对集合并循环遍历它们的语法,那也将非常有用,并且在每个配置文件中替换正确的值。 (不,请放心,我的服务称为红色、绿色和蓝色!)
【解决方案2】:

此操作不需要 Powershell。 Octopus 中的变量可以限定为部署过程中的一个步骤。因此,您可以有 3 个步骤,一个用于每个服务,以及 3 个用于队列名称的变量,每个变量都限定为其中一个步骤。

您还可以为服务名称添加变量,并在流程步骤设置中使用这些变量。这样您就可以从变量页面看到服务名称和队列名称。

【讨论】:

  • 是的,但是如果我在这方面使用真正的微服务,并将 NServiceBus 分成 100 个不同的队列怎么办?我不想在 Octopus 中走 100 步。实际上是400,因为我有(1)停止服务,(2)卸载服务,(3)安装服务和(4)启动服务步骤。这就是我希望能够循环播放的原因。
  • @ShaulBehr 如果您有 400 个微服务,我假设您无论如何都不想同时部署它们,因为它们是微服务。然后,您可能只会部署其中的一小部分,尽管这很烦人,但可能更适合额外的步骤。停止和卸载服务可以是部署前脚本,安装服务部署和部署后启动服务,使每个微服务一步到位。
  • 对我来说完美的解决方案,谢谢。它假设您没有太多步骤!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-18
  • 1970-01-01
  • 1970-01-01
  • 2019-04-14
相关资源
最近更新 更多