调试NServiceBus ServiceControl Heartbeat插件

时间:2016-03-30 11:41:20

标签: azure nservicebus nsb-servicecontrol

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

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

当我通过RD登录时,我可以在批准中看到心跳组件。我的配置对于两个场景都是相同的,但我会在此处添加它以供参考:

在我的配置appsettings中:

<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.log。

当workerrole启动,并且NSB启动时,我可以在日志中找到它(btw与发送心跳的workerrole中的内容完全相同):

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

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

对于我可能遗失的任何想法?或者我可以尝试解决这个问题?

提前致谢!

1 个答案:

答案 0 :(得分:0)

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

在ServicePulse中我可以看到一个端点:Endpoint @ MachineA。 MachineA是我的CloudService“Test”的辅助角色实例的实际计算机名称。我可以通过RD登录到这个实例,看看NSB的日志激活心跳功能。 当我通过自动部署部署到CloudService“Dev”时,我在ServicePulse中没有额外的端点。所以我决定完全删除CloudService“Test”。

当我检查ServicePulse时,端点Endpoint @ MachineA仍在运行并且每秒都接收心跳。我无法弄清楚为什么因为我刚刚删除了具有该特定实例的CloudService“Test”。

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

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

希望能帮助别人!