美文网首页@IT·大数据RabbitMQ程序员
RabbitMQ-Java客户端API指南-下

RabbitMQ-Java客户端API指南-下

作者: 全能程序猿 | 来源:发表于2017-12-07 17:16 被阅读37次

    RabbitMQ-Java客户端API指南-下

    使用主机列表

    可以将Address数组传递给newConnection()。的地址是简单地在一个方便的类com.rabbitmq.client包与主机 和端口组件。
    例如:

    Address[] addrArr = new Address[]{ new Address(hostname1, portnumber1), new Address(hostname2, portnumber2)};
    Connection conn = factory.newConnection(addrArr);
    

    使用AddressResolver接口进行服务发现

    从版本3.6.6开始,可以让AddressResolver的实现 在创建连接时选择连接的位置:

    Connection conn = factory.newConnection(addressResolver);
    public interface AddressResolver {
      List<Address> getAddresses() throws IOException;
    }
    

    就像主机列表一样,返回的第一个地址将首先被尝试,如果客户端无法连接到第一个地址,则返回第二个,依此类推。

    从网络故障中自动恢复

    连接恢复

    ConnectionFactory factory = new ConnectionFactory();
    factory.setUsername(userName);
    factory.setPassword(password);
    factory.setVirtualHost(virtualHost);
    factory.setHost(hostName);
    factory.setPort(portNumber);
    factory.setAutomaticRecoveryEnabled(true);
    // connection that will recover automatically
    Connection conn = factory.newConnection();
    

    如果由于异常而导致恢复失败(例如,RabbitMQ节点仍然无法访问),则会在固定的时间间隔(默认值为5秒)后重试。间隔可以配置:

    ConnectionFactory factory = new ConnectionFactory();
    // attempt recovery every 10 seconds
    factory.setNetworkRecoveryInterval(10000);
    

    当提供地址列表时,列表被混洗,并且所有地址在下一个地方被尝试:

    ConnectionFactory factory = new ConnectionFactory();
    Address[] addresses = {new Address("192.168.1.4"), new Address("192.168.1.5")};
    factory.newConnection(addresses);
    

    指标和监测

    从版本4.0.0开始,客户端收集运行时指标(例如已发布消息的数量)。度量标准集合是可选的,并使用setMetricsCollector(metricsCollector)方法在ConnectionFactory级别进行设置 。此方法需要一个MetricsCollector实例,在客户端代码的多个位置调用该实例。
    客户端支持 Micrometer (截至版本4.3)和 Dropwizard Metrics 开箱即用。
    以下是收集的指标:

    打开连接的数量
    开放频道的数量
    已发布消息的数量
    消耗的消息数量
    已确认消息的数量
    被拒绝的邮件数量

    Micrometer和Dropwizard Metrics都提供计数,但也包括平均速率,最后五分钟速率等,用于与消息相关的指标。他们还支持通用的监控和报告工具(JMX,Graphite,Ganglia,Datadog等)。

    Micrometer支持

    ConnectionFactory connectionFactory = new ConnectionFactory();
    MicrometerMetricsCollector metrics = new MicrometerMetricsCollector();
    connectionFactory.setMetricsCollector(metrics);
    ...
    metrics.getPublishedMessages(); // get Micrometer's Counter object
    

    支持 多种报告后端:Netflix Atlas,Prometheus,Datadog,Influx,JMX等
    您通常会将MeterRegistry的一个实例传递 给MicrometerMetricsCollector。这里是JMX的一个例子:

    JmxMeterRegistry registry = new JmxMeterRegistry();
    MicrometerMetricsCollector metrics = new MicrometerMetricsCollector(registry);
    ConnectionFactory connectionFactory = new ConnectionFactory();
    connectionFactory.setMetricsCollector(metrics);
    

    Dropwizard Metrics支持

    ConnectionFactory connectionFactory = new ConnectionFactory();
    StandardMetricsCollector metrics = new StandardMetricsCollector();
    connectionFactory.setMetricsCollector(metrics);
    ...
    metrics.getPublishedMessages(); // get Metrics' Meter object
    

    支持 多种报告后端:Netflix Atlas,Prometheus,Datadog,Influx,JMX等
    您通常会将MetricsRegistry的一个实例传递 给StandardMetricsCollector。这里是JMX的一个例子:

    MetricRegistry registry = new MetricRegistry();
    StandardMetricsCollector metrics = new StandardMetricsCollector(registry);
    
    ConnectionFactory connectionFactory = new ConnectionFactory();
    connectionFactory.setMetricsCollector(metrics);
    
    JmxReporter reporter = JmxReporter
      .forRegistry(registry)
      .inDomain("com.rabbitmq.client.jmx")
      .build();
    reporter.start();
    

    相关文章

      网友评论

      本文标题:RabbitMQ-Java客户端API指南-下

      本文链接:https://www.haomeiwen.com/subject/ajkjixtx.html