Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: tech edits

...

AMQP provides the ability to do Point-to-Point, Peer-to-Peer, Pub-Sub, and Eventing. This allows many patterns to be craetedcreated:

Point-to-point

This is one of the simplest use-cases. AMQP allows for this in a few ways.
a.) A client can create a named queue allowing the producer to publish the message to the direct exchange with the key mapping the queue name. This will route the message to that queue.
b.) The above pattern can be extended by specifying a reply-to address in the published messages allowing for the consumer to reply the producer without knowing who it was send sent from prior to receiving the message.

...

a.) AMQP provides a 'fanout' exchange which will send a message to all the queues that have been bound to it. Different domains or topics are created with the 'fanout' exchange by declaring different differently named fan-out exchanges.

b.) A 'topic' or 'headers' exchange can also be used. in In this case the pattern match is used to send the message to all the its bound queues. It can be thought of as a filter allowing you to create just about any One-to-many routing patterns.

...

Topic can be created with the 'topic' or other 'direct' exchange to allow consumer to bind to into the steams of data they care about. This pattern combined with the use of reply-to and Alternate-routing is the a staple of what most people use messaging for today.

...

AMQP supports two types of transactions in AMQP 0-10, TX and DTX. This allows for both local (1PC) , and 2PC transaction transactions and the ability to coordinate with a TM (Transaction Manager). The Java broker supports TX , while the C++ broker support supports TX, DTX, XA, JTA for fully ACID transactions. This allows you to commit a single unit of work with which may contain enqueues & dequeues either locally on the broker, or in coordination with other transactional resource like RDBMS.

...

By default messages are transient. Transient message messages can be sent to queues that are durable. They will not be safe stored or recovered, and will perform as any other transient message - fast!

...

As AMQP 0-10 is symmetric for peer-to-peer communication all the building block blocks are in place for creating networks of brokers. The C++ broker allows you to link the brokers together using 'qpid-route' and then create routes between the brokers either statically or with dynamic routes.

This allows for a message to be published to one broker and consumed from another broker in the federated broker network. This feature is great to create for creating data-centercenters, or for project isolation , but allow while allowing cross communication. It also allows networks to be created to scaledscale upon demand. For more details see

And many others, including custom patternpatterns

Message Reply, Rings, Initial Value Caches, Last Value Messaging

All the above cases can be constructed using the AMQP and features of Qpid. For example reply can be constructed using message browsing and setting TTL on the messages. The C++ broker also support supports ring queues, last value queues, and initial value caches on exchanges. With a bit of throught thought many additional patterns can be constructed.

...

Store-and-forward can be achieved by publishing to well know known durable queues , that are not marked with auto-delete. Consumers will be able to 'came back' to consume then them at any time, even after restarts.

...

In additional the C++ broker supportsupports

  • XML Exchange - Query routing
  • Custom exchange via plug-in.

...

What encryption does Qpid support?

  • Qpid support supports SSL/TSL as per the AMQP specification.
  • In addition the C++ broker supports Kerberos encryption of messages independent on of which transport is used. Support in not yet included in for all clients for this but is in processprogress.

What authentication does Qpid support?

SASL Authentication is supported. All Clients clients support PLAIN, and Kerberos support if being added to all the clients. The C++ broker support supports Kerberbos authentication.

...

ACL supports realms and allows for granular permission to be set on all the broker actions including management on an user or group basis.

How to setup Kerberos with the Java client

You could force the java client can force Java clients to use kerberos auth Kerberos authentication by specifying it in the connection URL as follows.

Code Block
amqp://guest:guest@clientid/testpath?brokerlist='tcp://localhost:5672?'&sasl_mechs='GSSAPI'

You would then will also need to pass in the following jvm JVM arguments:

Code Block
-Djavax.security.auth.useSubjectCredsOnly=false
# (This will force the SASL GASSPI client to obtain the kerberosKerberos credentials explicitly instead of obtaining from the "subject" that owns the currents thread)
-Djava.security.auth.login.config=myjas.conf  (this specifies the jass config file)
-Dsun.security.krb5.debug=true (to enable detailed debug info for troubleshooting)

Before running the java Java client you would need to do kinit and grab a kerberos Kerberos ticket. Alternative Alternatively you could set useTicketCache=false and when the client loads, it will prompt you for the user/pass and will obtain the ticket for you
(You would 'll also need to setup your kerberos Kerberos environment properly -refer to doc links below).

...

I want to be able to have an exclusive consumer, but when it dies I want another to be able to pick up the queue and then block others, can this be done?

Yes, Declare you declare your queue exclusive. this This will prevent anyone else from connecting to the queue. If the consumer dies the next consumer can attach to the queue by redeclaring it using the exclusive flag. Make sure not to set auto-delete. Any consumer trying to declare , a queue exclusive while a another consumer is already attached to the queue will receive an exception.

...

Once the session that held the consumer is closed.

Performance

Does Qpid

...

perform well (Latency/Throughput)?

Yes, The Qpid C++ broker has been achieved great benchmark results in published papers by those that redistribute it. The Red Hat MRG product build built on Qpid has shown 760,000msg/sec ingress on an 8 way box or 6,000,000msg/sec OPRA messages.

Latencies have been recored recorded as low as 180-250us (.18ms-.3ms) for TCP round trip and 60-80us for RDMA round trip using the C++ broker.

...

There is a great resource supplied in the C++ broker test directory called perftest. If It allows you to create a load on a broker for all the exchanges, multiple queues, multiple connectionconnections, coordinate multiple publishing and consuming processes, beachmark benchmark transactions and much much more such as acquire mode, txn size, message size, etc.

For To see all the available options

Code Block
./perftest --help

...

There is a great resource supplied in the C++ broker test directory called latencytest. It is a loopback test that produces messages by count or at a rate, time stamps timestamps them and then consumes them back and record records the latency. It supports many of the Qpid options, including the ability to vary things like frame-size.

...

  • 1G TCP ~ .3ms -.5ms
  • 10G TCP - .18ms - .22ms
  • RDMA transport - 40us - 80us

Don't forget to set tune the machine and set --tcp-nodelay on both the C++ broker & client.

...

Does Qpid support flow control?

yesYes, AMQP 0-10 allows for flow control on the consumer and producer.

...

Code Block
  --max-session-rate MESSAGES/S (0)         Sets the maximum message rate per session (0=unlimited)

Management

What Management options does Qpid support?

The Java broker supports JMX and provides an Eclipse plug-in and command line tool to manage via JMX. The C++ broker has far more extensive management support via QMF which will be added to the Java broker in a future release.

The C++ Broker supports a layered management protocol over AMQP called QMF. This allows for the management of resource resources either in the broker or connected to the broker via the AMQP fabric. This management includes statistics, control, eventing, and reporting/updating properties.

...

  • qpid-tool - telnet type tool to access data, view schema, issue command an and and issue commands on a QMF resource
  • qpid-config - tool to configure queues, exchanges, etc. all using the details on the AMQP model
  • qpid-route - tool to configure broker federation
  • qpid-events - utility that will print to cmd the command line or syslog event from a broker like, userconnected, user crested/deleted a queuesystem log broker events such as users connected, users creating/deleting a queue, etc.
  • qpid-stats - utility that will print out queue statistics to the cmd command line or syslog a system log like rate and message depth.

Then you can also access all thsi this information via JMX or WS-DM (work in progress) using QMan.

What logging tracing and events does Qpid support?

Qpid support supports the ability to output events from any the broker or any managed object via QMF, or to do a variety of logging from the broker & and clients. for To see tracing options run qpidd --help.

Multiple levels of of logging are supported in the C++ broker from debug, warning, error, info, etc – all of which can be further filtered.

Can I

...

see all the management data from a client?

yesYes, All the all management data is consists of just AMQP messages on specially named queues. An API is provided for working with the management data called QMFC is provided.

What is QMF

QMF is the layered Management protocol used to manage the C++ broker. For details on teh this protocol see the Development pages.

QMF allows you to manage any resource and provides the following infrsstructureinfrastructure:

  • Properties
  • Statistics
  • Commands
  • Events
  • Schema for resources and versioning
  • tools for creating agents and consuming QMF data.

...

An Agent is any client (producer or consumer) that generates a QMF schema and registers itself to be management managed by QMF.

A great use case of this is a consumer that is processing order orders from a queue can reference itself to that queue and for example provide a schema for the number or successful orders process processed and a method to suspend processing. Now it becomes possible to use qpid-tool to connect to the broker, see which order processors are on queue via the reference and the via the stats of the order processor client. It is also possible to issue a command to the client via qpid-tool to suspend processing. An ACL in the broker can be applied to all these actions if desired.

...