Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: tech edits (part II)

...

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

...

The C++ broker has plug-ins for Active-Active clustering which keep keeps all the nodes of the cluster in sync. This means that any action that is performed on one of the brokers on the cluster is performed on all of them at the same time. New nodes can be added to the cluster at any time, and removed at any time with no consequences, exept except for the extra multi-cast load created for the sync on joining.

...

Do clients get notified members joining or leaving the cluster?

yesYes, All all clients are updated with the addresses of node add/removed as supported by the AMQP 0-10 specification. This means that the client can dynamically track the nodes in the cluster and reconnect as required.

Can I specify more than one host to connect initially to the cluster to avoid single point of failure?

yesYes, the AMQP address is multi-honed homed and more than one IP address can be specified at the initial connection. The client will then iterate through the host hosts until it makes a successful connection. This feature can also be used in none non-clustered brokers.

How does Clustering work?

...

Every action that is performed on any node of the cluster is then sequenced via totem and then performed on each node of the cluster in sync. As the cluster backbone is multicast, a separate network can be used for cluster communication and there is little impact adding additional nodes to the cluster with-in within reason.

What is Federation?

Federation provides the ability to create networks of brokers that communicate with each other in all types of typologies. This allows a producer to publish messages to one broker and someone to consume the messages from another broke broker somewhere on the broker federated network.

For more details see

...

Disaster recovery features are in process, Q&A will be added once they are complete.

Heartbeats

Heartbeat can be configured to allow clients to detect when a broker has failed and connect to another broker or cluster member. Heartbeats are sent by the broker at a client specified, per-connection frequency. If the client does not receive a heartbeat or any other traffic for two heartbeat intervals, the connection will be made to fail.

...

If there is no traffic for two heartbeat intervals, the client will fail the connection. The application will see the exact same response as when if the connection is were killed.

What happens if the broker is unable to send heartbeat?

...

Then make sure that the interfaces on each broker are reachable from the host you run my the clients, else it will take a long time for the socket to timeout until it gets to one that can be reached.

Make sure the list of URL's on the cient client are the ones you want tht the client to try

Make sure that the broker is only exporting URL's that the client can connect to, use the --cluster-url option on the broker to specify this.

...

The broker uses IO threads for all the work it does. This means that when work is signalled via an event (socket, RDMA, timer) an IO thread is scheduled and it runs until it completes the work and then returns back to the IO thread pool. This allows the CPUs to be utilized efficiently. The general rule is that we allocate 1 thread per core +1. So on a 8 way machine you'll see worker-threads default to 9. On a 4 way it will be 5. Sometimes it if work changing 's useful to change the default allocation if for example:

a.) you run on high core count machine >8 (more than 8 cores) to a lower number
b.) if you taskset, then set to the cores allocated +1

...

Concurrency in the broker is at the session level. So yes. If , so if you want more concurrency , create another session on the same connection.

How are worker threads allocated to individual client sessions if there are more clients than threads in the pool?

They Threads are not allocated to a specific clientclients.

Persistence

Does Qpid support persistence (durability)?

...

The terms durable and persistent are used interchangeably in this FAQ.

Where do I get the 3rd party

...

persistent store modules?

The 3rd party persistence persistent store modules may be obtained through anonymous subversion Subversion at the following locations:

...

For further details see 3rd Party Libraries

How do I build

...

a persistent store module from subversion checkouts?

C*++*The README file contains detailed instructions, but here is a summary:

  1. Make sure that both the db4-devel and libaio-devel packages are installed prior to building.
  2. Make sure that qpid is built and you know the location of the qpid directory (ie i.e., the top-level directory containing the python and cpp sub-directories).
  3. In the store directory, run:
    Code Block
    ./bootstrap
    ./configure --with-qpid-checkout=/abs/path/to/qpid/dir
    make
    
  4. When built, the store library msgstore.so will be located in the lib/.libs directory.

...

Which version of the store should I use when building against qpid 0.X?

C++
If you build qpid Qpid from the head revision of the svn SVN trunk, you should be able to build the store against it using the store's head revision on its trunk. However, if you build the store from a released version of qpid, you will need to check out a specific version of the store to get it to compile, or use one of the following svn tags:

...

Code Block
svn co http://anonsvn.jboss.org/repos/rhmessaging/store/tags/[tagname]/cpp [local-dir-name]

JavaTODO

How do I use

...

a persistent store module?

C++

  1. Start the broker making sure that the store module is loaded, ie
    Code Block
    qpidd --load-module=/path/to/msgstore.so --data-dir=/path/to/store-files ...
    
  2. Make sure that queues that will handle persistent messages are set durable.
    Note
    titleNote: Existing non-persistent queues cannot be made persistent

    If a queue has been declared without persistence, doing so again with persistence enabled while the old queue still exists in the broker will be ignored. Make sure that when a queue is declared persistent, there is no non-persistent queue of the same name in existence.

  3. For each message sent to a durable queue, make sure that it is set durable.

JavaTODO

How do I configure

...

a persistent store?

C++

The broker loads help information from each module. To see the help options for the store, load the store module and specify help:

...

  • IP over IB or Fibre needs to be setup for the initial negociationnegotiation
  • You need to make sure you have enough memory to pin for DMA use ulimit -l something large
  • you might need to edit /etc/security/limits.conf first then log in again

...

I need to be able to set time for a message that I send to be removed from the queue if it is not read by my subscriber. For example: I enqueue a message and I want it to be automatically dequeued after a certain amount of time has passed. Is there a feature like this in qpidQpid?

yesYes, the TTL can be set in the message headers and the messages get dequeued if TTL expires

...

This problem occurs because the PYTHONPATH environment variable does not include the location of the qpid python Qpid Python files. If you are running from the SVN checkout, add <path>/qpid/python to PYTHONPATH (where <path> is the location of your SVN tree). If you are installing from source, make sure you configure with the same prefix where Python is installed. This is most likely:

...