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秒)後重試。間隔可以配置:

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();
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章