RabbitMQ-Java客户端API指南-下

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秒)后重试。间隔能够配置:ui

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

当提供地址列表时,列表被混洗,而且全部地址在下一个地方被尝试:code

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 开箱即用。
如下是收集的指标:接口

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

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

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的一个例子:get

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();
相关文章
相关标签/搜索