0

我有一个在 Azure 辅助角色上运行的 NServiceBus 端点。我安装了包 ServiceControl.Plugin.Nsb5.Heartbeat。当我直接从 VS 部署到云服务时,我的端点显示在 ServicePulse 中,并且我得到了预期的心跳。

当我完成我们的自动化部署过程时,servicepulse 没有检测到端点,并且我没有收到任何心跳。(即使您没有安装心跳插件,ServicePulse 也会检测到端点并告诉您该端点没有安装心跳插件)。

当我通过 RD 登录时,我可以在 approot 中看到心跳程序集。我的配置对于两种情况都是相同的,但我将在此处添加以供参考:

在我的配置应用程序设置中:

<add key="Heartbeat/Interval" value="00:00:01" />
<add key="ServiceControl/Queue" value="xxx.xxx.servicecontrol" />

我的其余配置:

<section name="MessageForwardingInCaseOfFaultConfig" type="NServiceBus.Config.MessageForwardingInCaseOfFaultConfig, NServiceBus.Core" />
<MessageForwardingInCaseOfFaultConfig ErrorQueue="error" />

我的 ServiceControl 实例在我的本地计算机上运行并监视正确的服务总线。错误队列名称设置为error,就像在配置中一样,错误转发队列名称设置为error.log。

当 workerrole 启动并启动 NSB 时,我可以在日志中找到它(顺便说一句,这与我在发送心跳的 workerrole 中找到的完全相同):

Name: Heartbeats
Version: 2.0.0
Enabled by Default: Yes
Status: Enabled
Dependencies: None
Startup Tasks: HeartbeatStartup

我完全不知道为什么相同的代码表现不同。它是相同的代码、相同的配置、相同的设置,只是部署方式不同。在比较已部署的程序集时,我无法检测到差异。心跳组件就在那里,看起来 NSB 也在接收它。我只是没有收到来自该特定端点的任何心跳。

知道我可能会错过什么吗?或者我可以尝试解决这个问题?

提前致谢!

4

1 回答 1

1

事实证明,两个端点都在发送心跳,但 ServicePulse 将它们显示为一个端点。

在 ServicePulse 中,我可以看到一个端点:Endpoint@MachineA。MachineA 是我的 CloudService“测试”的工作角色实例的实际机器名称。我可以通过 RD 登录到这个实例并查看 NSB 的日志激活心跳功能。当我通过我们的自动化部署部署到 CloudService“Dev”时,我在 ServicePulse 中没有额外的端点。所以我决定彻底删除 CloudService “Test”。

当我检查 ServicePulse 时,端点 Endpoint@MachineA 仍然处于启动状态并每秒接收一次心跳。我不知道为什么,因为我刚刚使用该特定实例删除了 CloudService“测试”。

我决定重命名端点,并通过我们的自动化程序部署到 CloudService“Dev”(因此 CloudService“Test”不存在)。那一刻我看到端点 Endpoint@MachineA 挂了,一个新的 EndpointRenamed@MachineX 挂了,接收心跳消息。

因此,从我的两个端点都发送心跳的意义上说,这不是问题。问题在于 ServicePulse 以某种方式认为它们是同一个端点。它们确实具有相同的名称,但它们托管在不同机器上的不同云服务中,应将其转换为 ServicePulse 中的另一个端点。

希望对某人有所帮助!

于 2016-03-30T12:43:06.823 回答