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();