Ich möchte einfach eine AMQP 1.0-Verbindung mit einer bestimmten max_frame_size
unter Verwendung der Apache Qpid Proton client library öffnen. Dies ist in einer Testsuite, keine reale Anwendung.Einstellung der `max_frame_size` der Verbindung in Qpid Proton AMQP 1.0 Client-Bibliothek
Die Java-Bibliothek scheint fortgeschrittener als die C-Bibliothek und ihre verschiedenen Bindungen für andere Sprachen, also habe ich begonnen, die Java-Bibliothek zu verwenden. Leider kann ich keinen Weg finden, diesen Parameter zu setzen, obwohl es einen Weg geben muss: Es gibt Transport
class, der anbietet, max_frame_size
zu erhalten oder zu setzen.
Ich versuchte zuerst mit der Messenger API, dann spielte ich mit der Engine API. Ich konnte nicht herausfinden, wie ich auf die Transport-Instanz zugreifen kann. Im Fall der Engine-API sehe ich, dass es eine Connection.getTransport()
gibt und habe das versucht, aber es ist NULL, wenn ich diese Funktion aufruft.
Hier ist mein letzter Test:
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();
}
}
Ich gebe zu, ich habe sehr begrenzte Kenntnisse von Java. Könnten Sie bitte bestätigen, dass es sogar möglich ist, diesen Parameter zu setzen, und wenn ja, sagen Sie mir wie?
Danke, mit 'transport.bind (Verbindung)' scheint zu funktionieren. Ich werde Ihre Antwort akzeptieren, obwohl ich sie nicht vollständig testen konnte, weil der Rest des Testprogramms nicht funktioniert (es öffnet nicht einmal eine TCP-Verbindung ...). Leider habe ich zu viel Zeit mit dieser Client-Bibliothek verbracht und bin stattdessen zur .NET-Bibliothek gewechselt. –