Qpid Network Layer Update 2010Page added by Andrew KennedyIntroductionThis page covers analysis and design work for the work to refactor and improve the network layer code of the Qpid Java client and broker. The purpos this is to rationalise the network layer interfaces across all AMQP protocol versions, all network transport types and to allow the same network code to be used in both the client and the broker if required. Additionally, it allows for future changes to the network code in a manner that is independent of the protocols or transports. Further improvements to the broker have also be included in the scope of this work, including making the ApplicationRegistry object a singleton, and collecting broker startup code in a single class to allow various use cases, such as OSGi modularisation or system testing to be simplified. On the client side, 0-10 VM protocol support is added, as well as better failover and exception handling in the 0-10 code paths. In general, the coupling between different parts of the system is reduced and the responsibilities of individual classes are reduced and better defined. Test coverage is also improved across all supported AMQP protocols, and many test cases that are currently failing under 0-10 are fixed. A [Presentation|^transport-layer.ppt] is available describing the status as of September 2010, when the bulk of this work was initiated and carried out. More recently, in February 2011 the code has been revisited and merged with the trunk in preparation for being committed as part of the 0.11 development stream and with the intention of the inclusion in the 0.12 release.. Original Transport Code0-8 and 0-9 Client
0-10 Client
Broker
DesignNew set of interfaces to define a 0-10 (and maybe 1-0 too) transport interface. Note that this means MINA, Grizzly, NII etc. rather than TCP/IP, UDP, Unix Sockets, Pipes or whatever. It should be possible to have different underlying transport mechanism, however, so when MINA is specified, we can further implement the Socket, VmPipe etc. connectors. Unable to render embedded object: File (qpid-transport.png) not found. Classes and InterfacesUnable to render embedded object: File (networking-classes-orig.png) not found. The intention of the work is to simplify the interface hierarchy, and in particular get rid of situations such as the ProtocolEngine_0_10 interface, where A implements B which extends C, and also A extends B' which implements C, this being rather redundant. Additional issues with interfaces include duplicate method declarations, where a method is defined in interface A, B extends A but still declares the same method. These should be removed where possible. Ideally, ProtocolEngine will be replaced by Receiver<ByteBuffer> everywhere, and the extra methods moved to a transport layer interface. I came across the following snippet in AMQConnectionDelegate_8_0#makeBrokerConnection() and wondered what the UseTransportIo property was for: // TODO: use system property thingy for this if (System.getProperty("UseTransportIo", "false").equals("false")) { TransportConnection.getInstance(brokerDetail).connect(_conn._protocolHandler, brokerDetail); } else { _conn.getProtocolHandler().createIoTransportSession(brokerDetail); }
WorkflowRationalise 0-10 Transport InterfaceQPID-2811 0.11 In Progress Create or modify current transport mechanism classes and interfaces to make them more generic and allow for other mechanisms and protocols to be added in a modular way. Update 0-10 connection configuration mechanism and propertiesQPID-2812 0.11 In Progress Update the 0-10 connection settings and system properties to rationalise the configuration of the connection mechanism/transport/protocol. This may depend on how different transport mechanisms are loaded, e.g. if we use OSGi plugins or not. It would be nice to make things consistent across all protocols, so that broker addressing does not change. Note that some transports may not support all types of broker addressing,and this has to fail gracefully. This will also include removal of some classes and options, such as the IoTransport configuration property. This property is present as an apparently untested 0-9 protocol only option, and uses an entirely new mechanism to connect the transport layer to the MINA mechanism. Since the intent of the preceding JIRA is to harmonise the transport layer interfaces between protocols, I believe this is an unnecessary complication. Update current 0-10 socket connection to conform to new mechanismQPID-2813 0.11 In Progress Make any additional changes to the existing transport to allow it to conform fully to the changes made in QPID-2811 and QPID-2812 Create TCP based 0-10 MINA transportQPID-2816 0.11 In Progress Create a 0-10 MINA transport that implements the tcp:// protocol for broker communication Create MINA InVM 0-10 TransportQPID-2814 0.11 In Progress Create a MINA transport that implements the vm:// VmPipe protocol, to allow for in-vm communication with the 0-10 protocol Make InVM broker startup protocol independentQPID-2815 0.11 In Progress Update the way the in-vm broker is started to decouple it from any particular protocol version Make Transport mechanisms into OSGi pluginsQPID-2818 TODO Make the transport mechanism pluggable using OSGi on both the broker and the client Add additional pluggable transport mechanismsQPID-2819 TODO Add additional transport mechanisms such as Netty or Grizzly
Change Notification Preferences
View Online
|
Add Comment
|
- [CONF] Apache Qpid > Qpid Network Layer Update 2010 confluence
- [CONF] Apache Qpid > Qpid Network Layer Update 2010 confluence
- [CONF] Apache Qpid > Qpid Network Layer Update 2010 confluence
- [CONF] Apache Qpid > Qpid Network Layer Update 2010 confluence
- [CONF] Apache Qpid > Qpid Network Layer Update 2010 confluence
- [CONF] Apache Qpid > Qpid Network Layer Update 2010 confluence
- [CONF] Apache Qpid > Qpid Network Layer Update 2010 confluence
- [CONF] Apache Qpid > Qpid Network Layer Update 2010 confluence
- [CONF] Apache Qpid > Qpid Network Layer Update 2010 confluence
- [CONF] Apache Qpid > Qpid Network Layer Update 2010 confluence
- [CONF] Apache Qpid > Qpid Network Layer Update 2010 confluence
