2017-05-30 13 views
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") 
    } 
}() 
+0

このコードは、RabbitMQ 3.6.10、Erlang 19.3を実行しているローカルのDockerインスタンスでテストしました。 set_vm_memory_high_watermarkを調整すると、ブロックされたリスナーが適切に応答していることがわかります。私は、サーバがメモリ制限に達する前にCPUに束縛されていて、フロー制御メッセージを送信できないか、サーバコードの以前のバージョンに問題があるかどうか疑問に思っています。 – JohnnyD

答えて

0

を持っている私はBlockedListenerと(推奨されません)FlowListenerを混乱されました。