2016-07-11 4 views
0

Apache Qpid Proton client libraryを使用して、特定のmax_frame_sizeでAMQP 1.0接続を開くだけです。これは、実世界のアプリケーションではなく、テストスイート内にあります。Qpid Proton AMQP 1.0クライアントライブラリで接続の `max_frame_size`を設定する

Javaライブラリは、Cライブラリや他の言語用のさまざまなバインディングよりも高度なようです。そのため、私はJavaを使い始めました。残念ながら、私はこのパラメータを設定する方法を見つけることができませんが、方法が必要です:max_frame_sizeを取得または設定するためのこのTransport classがあります。

私は最初にMessenger APIを試した後、Engine APIで試してみました。私はトランスポートインスタンスにアクセスする方法を理解できませんでした。 Engine APIの場合は、Connection.getTransport()があり、それを試しましたが、この関数を呼び出すときにはNULLです。私は、私は、Javaの非常に限られた知識を持って認める

private void do_test_with_frame_size(int frame_size, int payload_size) { 
    Connection conn = Connection.Factory.create(); 

    Transport transport = conn.getTransport(); 
    transport.setMaxFrameSize(frame_size); 

    Session session = conn.session(); 

    Sender sender = session.sender("sender"); 
    conn.open(); 
    session.open(); 
    sender.open(); 

    if (sender.getCredit() > 0) { 
     String uri = System.getProperty("broker_uri"); 
     assertNotNull(uri); 
     String address = String.format("%s/fragmentation-%d-%d", 
      uri, frame_size, payload_size); 

     Message message = Proton.message(); 
     message.setAddress(address); 
     message.setBody(new AmqpValue(new byte[payload_size])); 

     byte[] msgData = new byte[1024]; 
     int length; 
     while(true) { 
      try { 
       length = message.encode(msgData, 0, msgData.length); 
       break; 
      } catch(BufferOverflowException e) { 
       msgData = new byte[msgData.length * 2]; 
      } 
     } 
     byte[] tag = "0".getBytes(); 
     Delivery delivery = sender.delivery(tag); 
     sender.send(msgData, 0, length); 
     delivery.settle(); 
     sender.advance(); 
     sender.close(); 
     sender.getSession().close(); 
     sender.getSession().getConnection().close(); 
    } 
} 

は、ここに私の最後のテストです。このパラメータを設定することさえ可能であることを確認してください。もしそうなら、私にどのように教えてください?

答えて

1

トランスポートインスタンスを作成して使用し、トランスポートを接続インスタンスにバインドする必要があります。作成されたConnectionには暗黙のトランスポートがバインドされていないため、現在nullが返されています。

+0

ありがとうございます。「transport.bind(connection)」を使用していただきありがとうございます。テストプログラムの残りの部分が動作しない(TCP接続を開くことさえできない...)ので、私はあなたの答えを受け入れるだろう。 Unforunately、私はすでにこのクライアントライブラリとあまりにも多くの時間を費やし、代わりに.NETライブラリに切り替えました。 –

関連する問題