qpid-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Gordon Sim <g...@redhat.com>
Subject Re: Problem with persitent store and routing (c++ broker)
Date Thu, 02 Sep 2010 08:35:53 GMT
On 09/01/2010 03:55 PM, Craig Forbes wrote:
> A quick summary of the problem.
>
> I have a remote c++ broker with a persistent queue. There is a push
> route on the remote broker to send messages in the persistent queue to a
> central broker.
>
> When the persistent store's journal is full (actually 80% full) and
> won't accept more messages. The push route stops relaying the messages
> in the queue. If I stop and restart the broker the queue route starts
> working again and the queue is drained.
>
> Has anyone run into this before? Is it a known issue?

Its expected that if the queue to which messages are being sent fills up 
then the route over which they are being sent will be interrupted by the 
exception. I believe it should periodically retry however and that seems 
to be borne our by the log below.

What seems odd is why restarting the broker fixes things... (Kim, might 
that be due to better compaction of the journal on restart?)

> In case you want more details here they are:
>
> A remote C++ broker with a persistent queue and limit-policy=ring
>
> A central C++ broker with a persistent queue and limit-policy=ring
>
> I have a route setup on the remote system to route all messages from the
> remote queue to the central queue
>
> I configured the queue and route on the remote system like this:
> qpid-config add queue QUEUE_NAME --durable --limit-policy ring

The above doesn't set an explicit limit, so the default limit will be 
used (as controlled via qpidd's --default-queue-limit option). I suspect 
that is higher than the limit for the default journal size.

If you use a max-size or max-count here to set an explicit limit that 
keeps the queue within the journals limits then the error should be 
avoided (as the older messages will be overwritten by newer ones, which 
I presume is what you want).

> qpid-route --transport ssl --durable --src-local queue add
> amqps://central localhost EXCHANGE_NAME QUEUE_NAME
>
> The idea is the remote machine has several clients submitting to the its
> broker which then sends them on the the central system, and queues them
> locally in the even the central broker can not be reached.
>
> This all works fine.
>
> The problem occurs when the journal on the remote machine fills up. When
> that occurs I see error messages about the queue being full and the
> inter-broker link disconnecting:
>
> 13:06:40 warning Client closed connection with 501: Enqueue capacity
> threshold exceeded on queue "QUEUE_NAME". (JournalImpl.cpp:621)
>
> 13:06:40 warning Inter-broker link disconnected from central:5671
>
> 13:06:45 warning Client closed connection with 501: Enqueue capacity
> threshold exceeded on queue "QUEUE_NAME". (JournalImpl.cpp:621)
>
> 13:06:45 warning Inter-broker link disconnected from central:5671

---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:users-subscribe@qpid.apache.org


Mime
View raw message