You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ASP.NET Core中对ActiveMQ进行健康检查?

在ASP.NET Core中检查ActiveMQ运行状态与健康状态

常见检查方式

ActiveMQ的健康状态检查通常有两种可靠实现路径:

  • 调用ActiveMQ管理控制台的Jolokia REST API(需确保ActiveMQ已启用该接口)
  • 使用ActiveMQ客户端库(如Apache.NMS)尝试建立连接,直接验证服务可用性

实现健康检查逻辑

方法1:通过Jolokia API检查

如果你的ActiveMQ实例启用了管理控制台(默认端口8161),可以调用其Jolokia接口获取健康状态指标。

完整代码实现:

using Microsoft.Extensions.Diagnostics.HealthChecks;
using System.Net.Http.Json;

public class ActiveMQHealthCheck : IHealthCheck
{
    private readonly HttpClient _httpClient;
    private readonly string _activeMQJolokiaUrl;

    // 构造函数注入HttpClient与配置的ActiveMQ地址
    public ActiveMQHealthCheck(HttpClient httpClient, IConfiguration configuration)
    {
        _httpClient = httpClient;
        _activeMQJolokiaUrl = configuration["ActiveMQ:JolokiaUrl"] ?? "http://localhost:8161/api/jolokia/read/org.apache.activemq:type=Broker,brokerName=localhost/CurrentConnectionsCount";
    }

    public async Task<HealthCheckResult> CheckHealthAsync(HealthCheckContext context, CancellationToken cancellationToken = default)
    {
        try
        {
            // 调用Jolokia接口获取连接数指标(可替换为其他健康指标)
            var response = await _httpClient.GetFromJsonAsync<JolokiaResponse>(_activeMQJolokiaUrl, cancellationToken);
            
            if (response == null || response.Status != 200)
            {
                return HealthCheckResult.Unhealthy("ActiveMQ服务无法响应健康检查请求");
            }

            // 可扩展:根据返回的指标值添加自定义健康判断逻辑
            return HealthCheckResult.Healthy("ActiveMQ服务运行正常");
        }
        catch (HttpRequestException ex)
        {
            return HealthCheckResult.Unhealthy($"无法连接ActiveMQ管理接口:{ex.Message}", ex);
        }
        catch (Exception ex)
        {
            return HealthCheckResult.Degraded("ActiveMQ健康检查出现异常", ex);
        }
    }
}

// 解析Jolokia返回结果的模型类
public class JolokiaResponse
{
    public int Status { get; set; }
    public object Value { get; set; }
}

方法2:通过客户端连接验证

如果无法使用Jolokia接口,可直接通过ActiveMQ客户端尝试建立连接、发送测试消息,验证服务可用性。

步骤与代码:

  1. 先安装NuGet包:Install-Package Apache.NMS.ActiveMQ
  2. 实现健康检查逻辑:
using Apache.NMS;
using Apache.NMS.ActiveMQ;
using Microsoft.Extensions.Diagnostics.HealthChecks;

public class ActiveMQHealthCheck : IHealthCheck
{
    private readonly string _activeMQConnectionString;

    public ActiveMQHealthCheck(IConfiguration configuration)
    {
        _activeMQConnectionString = configuration["ActiveMQ:ConnectionString"] ?? "tcp://localhost:61616";
    }

    public async Task<HealthCheckResult> CheckHealthAsync(HealthCheckContext context, CancellationToken cancellationToken = default)
    {
        IConnection connection = null;
        try
        {
            // 创建连接工厂并尝试建立连接
            var factory = new ConnectionFactory(_activeMQConnectionString);
            connection = await factory.CreateConnectionAsync(cancellationToken);
            await connection.StartAsync(cancellationToken);

            // 可选:发送测试消息到临时队列,验证消息收发链路
            using var session = await connection.CreateSessionAsync(AcknowledgementMode.AutoAcknowledge, cancellationToken);
            var tempQueue = await session.CreateTemporaryQueueAsync(cancellationToken);
            using var producer = await session.CreateProducerAsync(tempQueue, cancellationToken);
            var testMessage = await session.CreateTextMessageAsync("health-check-test", cancellationToken);
            await producer.SendAsync(testMessage, cancellationToken);

            return HealthCheckResult.Healthy("ActiveMQ服务连接正常,消息收发可用");
        }
        catch (ConnectionFactoryException ex)
        {
            return HealthCheckResult.Unhealthy($"无法创建ActiveMQ连接工厂:{ex.Message}", ex);
        }
        catch (NMSException ex)
        {
            return HealthCheckResult.Unhealthy($"无法连接ActiveMQ服务:{ex.Message}", ex);
        }
        catch (Exception ex)
        {
            return HealthCheckResult.Degraded("ActiveMQ健康检查出现异常", ex);
        }
        finally
        {
            connection?.Close();
            connection?.Dispose();
        }
    }
}

注册健康检查

在Program.cs中注册健康检查服务:

builder.Services.AddHealthChecks()
    .AddCheck<ActiveMQHealthCheck>("activemq");

// 若使用方法1的HttpClient方式,需额外注册HttpClient
builder.Services.AddHttpClient<ActiveMQHealthCheck>();

配置健康检查端点,以便外部访问:

app.MapHealthChecks("/health");

内容的提问来源于stack exchange,提问作者Arash Mehdipour

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 08:15:46