1

我正在尝试确保 3rd 方依赖项正在运行,并基于Monitoring 3rd party Sample Application构建了一个服务来执行此操作,它发出 ServiceControl CheckResult 消息。

这很好用;当我停止/启动本地和远程 Windows 服务、数据库、通量电容器等时,ServicePulse 会提醒我。

我现在想构建一个 Windows 服务/nServiceBus 端点,例如 ServicePulse,但具有可以尝试恢复、发送电子邮件等的逻辑。我真的不想将此代码放入 3rdParty 监视器中。

我遵循了servicecontrol/external-integrationsservicecontrol/contracts教程,并创建了我的MendStuffOrEmail端点——但它不起作用;它不接收任何消息。

我正要问“我做错了什么?”,但我想我知道;我正在使用 IHandleMessages<ServiceControl.Contracts.MessageFailed> 用于失败的消息。

我需要收听“CheckResult”类型的消息——但它们是什么?我查看了 ServiceControl 和 ServicePulse 代码,但无法确定发送/接收的内容。我怎样才能发现这一点,或者其他人实际上已经这样做并且已经知道了?

更新
经过更广泛的翻阅后,我还订阅了 CustomCheckFailed 和 CustomCheckSucceeded 消息。我为它们实现了 IHandle 接口,但我仍然没有收到任何消息。日志显示自动订阅者已订阅它们。接下来我应该检查什么?

4

1 回答 1

0

我将我的代码与 Sean 发布的 示例进行了比较,发现了错误:我在错误的类中实现了两个接口IConfigureThisEndpointAsA_Server(凌晨 2 点剪切“n”粘贴错误)。

该示例侦听失败的消息,但对于尝试执行此操作的任何其他人,您确实需要订阅CustomCheckFailedCustomCheckSucceeded消息 (nuget ServiceControl.Contracts)。

public partial class MessageHandler : IHandleMessages<CustomCheckFailed>,
                                      IHandleMessages<CustomCheckSucceeded>
{
    public void Handle(CustomCheckFailed message)
    {
        this.HandleImplementation(message);
    }
    partial void HandleImplementation(CustomCheckFailed message);

    public void Handle(CustomCheckSucceeded message)
    {
        this.HandleImplementation(message);
    }
    partial void HandleImplementation(CustomCheckSucceeded message);

    public IBus Bus { get; set; }   
}

然后是对消息做某事的逻辑。(我在最初的测试中离开了 - 发送电子邮件 - 但我们的系统有一个包含各种恢复和通知方法的库。你需要类似的东西来阻止电子邮件泛滥):

public partial class MessageHandler
{
    partial void HandleImplementation(CustomCheckFailed message)
    {
        var messageBody = string.Format("Message with id {0} failed with reason {1}", message.CustomCheckId, message.FailureReason);
        MailMessageFactory.sendEmail("Failure Notification", messageBody);

        Console.Out.WriteLine(messageBody);
    }
}

还有一个包含恢复消息逻辑的类似文件(CustomCheckSucceeded)。您可能希望在那里进行检查以检测它实际上正在从故障中恢复,而不仅仅是通过测试。

所以无论如何,固定 - 在我的开发电脑上。

下一个问题是让它在服务器上工作,该服务器需要一个支持电话。事实证明,ServiceControl 还需要一个许可证,作为“高级”、“企业”和“终极”版本的一部分提供 - 不是标准许可证平台的一部分。

于 2015-11-26T12:37:55.617 回答