Messaging that just works
We have performed basic interoperability testing against Qpid's M1 release. So far, we have run
Failure to do so will result in the Qpid
client reporting "Unable to connect" or
ACCESS_REFUSED errors, and RabbitMQ's log
file will contain errors such as
VHost access refused: no mapping for User <<"guest">>, VHost <<"/test">>
Use RabbitMQ's administration tool to provision user access, based on the information provided in the error messages.
If the server presents a maximum frame size of zero
during connection negotiation, subsequent attempts by
the Qpid client to publish a message result in a
"Error in client:
java.lang.NegativeArraySizeException" error
message.
The RabbitMQ server works around this limitation by presenting a maximum frame size of 131072 octets during connection negotiation.
The discrepancies are listed below. In most of these cases RabbitMQ has a dummy implementation in place for improved interoperability.
One such case are "fanout" exchanges, which are
implemented in RabbitMQ and used in several of the
examples. Qpid will report an error "Unknown
exchange type: fanout" in its logs and close the
connection.
The Qpid project is developing a broker-neutral test suite in Python. The following table details the results of running the AMQP 0-8 tests from that test suite against the RabbitMQ Erlang broker.
Note that the 0-8 spec file that comes with the test suite is different from the official spec. In order to run the tests you must download the official spec and run the test suite as follows:
run-tests -v -s specfile
| Current Status | Test Name | Notes |
|---|---|---|
| ok | test_example | |
| invalid | test_rollback | The test assumes that delivered messages are requeued on rollback, which is in violation of the spec. |
| invalid | test_auto_rollback | The test is actually the same as test_rollback and is therefore invalid for the same reason. |
| ok | test_commit | |
| ok | test_commit_overlapping_acks | |
| ok | test_ack | |
| ok | test_cancel | |
| ok | test_consume_exclusive | |
| failing | test_consume_no_local | "no_local" planned but unimplemented |
| ok | test_consume_queue_errors | |
| ok | test_consume_unique_consumers | |
| ok | test_get | |
| ok | test_qos_prefetch_count | |
| failing | test_qos_prefetch_size | prefetch size windowing planned but unimplemented |
| ok | test_recover_requeue | |
| ok | test | |
| ok | testDefaultExchange | |
| ok | testMatchAll | |
| ok | testMatchAny | |
| ok | testDifferentDeclaredType | |
| ok | testTypeNotKnown | |
| ok | testDirect | |
| ok | testFanout | |
| ok | testHeaders | |
| ok | testTopic | |
| ok | testAmqDirect | |
| ok | testAmqFanOut | |
| ok | testAmqMatch | |
| ok | testAmqTopic | |
| ok | test_amqp_basic_13 | |
| ok | test_basic_delivery_immediate | |
| ok | test_basic_delivery_queued | |
| ok | test_closed_channel | |
| ok | test_invalid_channel | |
| ok | test_bind | |
| ok | test_declare_exclusive | |
| ok | test_declare_passive | |
| ok | test_delete_ifempty | |
| ok | test_delete_ifunused | |
| ok | test_delete_simple | |
| ok | test_purge | |
| ok | testAssertEmptyFail | |
| ok | testAssertEmptyPass | |
| ok | testMessageProperties |