0
私は私のRabbitMQの構築しています(RabbitMQの3.6.5を、アーランR16B03)接続は、次のように:RabbitMQのフロー制御が動作しない(Javaクライアント)
ConnectionFactory factory = new ConnectionFactory();
factory.setHost(App.rabbitMQServer);
factory.setVirtualHost(App.rabbitVirtualHost);
factory.setRequestedHeartbeat(5);
factory.setConnectionTimeout(5000);
factory.setAutomaticRecoveryEnabled(true);
factory.setNetworkRecoveryInterval(5000);
Map<String, Object> clientProperties = new HashMap<>();
Map<String, Object> capabilities = new HashMap<>();
capabilities.put("connection.blocked", true);
clientProperties.put("capabilities", capabilities);
factory.setClientProperties(clientProperties);
_connection = factory.newConnection();
_channel = _connection.createChannel();
_connection.addBlockedListener(new BlockedListener() {
public void handleBlocked(String reason) throws IOException {
connectionIsBlocked = true;
log.warn("RabbitMQ connection blocked");
}
public void handleUnblocked() throws IOException {
connectionIsBlocked = false;
log.warn("RabbitMQ connection unblocked");
}
});
接続は、管理Webコンソールで[OK]を探します - 能力をただし、BlockedListenerメソッドは呼び出されません。私は何が欠けていますか?
ちなみに、私もその流れリスナーを呼び出すことはありませんゴーで書かれた別のプロセス...
flow := ch.NotifyFlow(make(chan bool))
go func() {
for f := range flow {
shouldFailoverToSQS = f
log.Infof("Flow status changed")
}
}()
このコードは、RabbitMQ 3.6.10、Erlang 19.3を実行しているローカルのDockerインスタンスでテストしました。 set_vm_memory_high_watermarkを調整すると、ブロックされたリスナーが適切に応答していることがわかります。私は、サーバがメモリ制限に達する前にCPUに束縛されていて、フロー制御メッセージを送信できないか、サーバコードの以前のバージョンに問題があるかどうか疑問に思っています。 – JohnnyD