【发布时间】:2019-05-07 17:43:41
【问题描述】:
我们有一个使用 Azure ServiceBus 的基于微服务的应用程序。 我们将其中一项服务(传奇管理器)部署为 .Net Core 控制台应用程序在 docker 容器 (Linux) 中。我们使用 docker-compose 并将一组 2 个容器(包括控制台应用程序)部署到一个 Azure 容器实例中。
我们使用 MassTransit 与 Azure ServiceBus 合作。
控制台应用程序(传奇管理器)通过 MassTransit.BusControlExtensions.Start() 方法启动服务总线。
此时控制台应用程序(传奇管理器)或多或少已准备就绪。
旁注:有问题的应用程序(传奇管理器)运行 Automatonymous 状态机
现在,如果我们停止或删除带有 saga 管理器的容器,然后重新启动它 - 它会停止接收总线消息。
似乎 每次重新启动 都会创建一个新的 saga 管理器实例(线程?) - 而旧实例(线程?)以某种方式持续存在。。 p>
即使我们在 Azure 上完全删除 Container Instance 资源 - 我们仍然可以观察到总线消息被某些东西拾取...
在删除容器组本身
后,容器的应用仍然存在有没有办法彻底杀死分离的实例/线程?
有人熟悉 Azure 容器实例的这种行为吗?
PS 在所描述的场景中,停止/删除操作总是成功的
PS2:这里是使用 az container create 命令部署有问题的容器组的 yaml 文件:
apiVersion: 2018-10-01
location: westeurope
name: #{groupName}#
properties:
containers:
- name: saga-aci
properties:
image: #{acrLoginServer}#/sagaazure:latest
resources:
requests:
cpu: 1
memoryInGb: 1.5
ports:
- port: 80
- port: 443
- port: 9350
- name: proxymanager-aci
properties:
image: #{acrLoginServer}#/proxymanager:latest
resources:
requests:
cpu: 1
memoryInGb: 1.5
ports:
- port: 22999
- port: 24000
osType: Linux
ipAddress:
type: Public
ports:
- protocol: tcp
port: '80'
#- protocol: tcp
#port: '8080'
- protocol: tcp
port: '22999'
- protocol: tcp
port: '24000'
- protocol: tcp
port: '443'
- protocol: tcp
port: '9350'
imageRegistryCredentials:
- server: #{acrLoginServer}#
username: #{acrName}#
password: #{acrPassword}#
tags: null
type: Microsoft.ContainerInstance/containerGroups
也许这是一个重星政策问题?
【问题讨论】:
-
不,我已经尝试了所有的操作组合——删除、启动;停止,启动等。每次旧进程持续存在,不能死。例如,即使对于 az 容器重启,旧进程仍然存在。重启前 - 1 个 saga 管理器正在运行,重启后 -2 个 saga 管理器正在运行;无止境。 az container delete 也会发生此过程乘法。在停止或删除之后,当然,你不能进入容器 - 但天蓝色的总线进程仍在运行。疯了。
-
如果您删除容器组,您确定 saga 仍在运行吗?不是其他服务?
-
所以用不精确的术语来说——容器被正确地杀死了,这是真的。然而,似乎一个线程/进程在我们的messgae总线上徘徊并与之交互
-
回答您的问题:我将通过应用程序洞察添加日志记录以确保但现在我们确信 SOMETHING 会接收总线消息并处理它们 - 即使在杀死所有可能的 saga 实例(尤其是容器组 - 通过 azure 门户、命令行、azure devops;也可以通过单独停止容器)。我将添加更多日志记录并让您知道。目前,我们有理由确定它仍在运行。 PS 其他服务已关闭 - 我们处于开发模式,所以我们可以这样做
标签: azure docker azureservicebus azure-container-instances automatonymous