>> I'm at a loss as to what's going on. This is repeatable, regardless of
>> queue size or contents.  It consistently slows down at the same point.
>>  How do I avoid this delay in these latter frames for large payloads?
>> Is there some kind of limiter that I'm not aware of?  Is there a magic
>> number for message size?
>
> Not that I am aware of, that is a curious result indeed. Do non-persistent
> messages show the same thing (wondering if its the persistence of the very
> large messages that is hitting some journal limit)?

Persistence makes no difference.  I restarted the broker without
persistence, and disable durability for both the queue and message
creation.

Here's a complete program that shows the defect.  It takes a file as a
parameter -- if that file is about 5MB or less, it will send the
message in under a second.  If it's greater than about 5.1MB, it will
add 3 seconds for every additional 64k frame that is required to send.

#include <qpid/client/Connection.h>
#include <qpid/client/Session.h>
#include <qpid/client/AsyncSession.h>
#include <qpid/client/Message.h>
#include <string>
#include <iostream>
#include <vector>
#include <iterator>
#include <fstream>
#include <algorithm>

using namespace qpid::client;
using namespace qpid::framing;

int main(int argc, char *argv[])
{
    Connection c;
    c.open("localhost", 5672);

    Session s = c.newSession();
    s.queueDeclare(arg::queue = "logs", arg::durable=false);
    s.exchangeBind(arg::exchange="amq.topic", arg::queue="logs",
arg::bindingKey="logs.#");

    // read the file in
    typedef std::istream_iterator<char> istream_iterator;
    std::ifstream file(argv[1]);
    std::vector<char> buffer;
    file >> std::noskipws;
    std::copy(istream_iterator(file), istream_iterator(),
std::back_inserter(buffer));
    string mydata(buffer.begin(), buffer.end() );

    // send the message
    Message message;
    message.getDeliveryProperties().setRoutingKey("logs.1001.10000");
    message.setData(mydata);
    // DELAY HAPPENS HERE.  Run qpidd with -t to see the frame receive
timings...
    s.messageTransfer(arg::content=message, arg::destination="amq.topic");

    s.sync();
    s.close();
    c.close();
}


This is a showstopper to me.  I'm interested in any ideas on where/why
this happens and how to dig in and fix it.

Thank you very much!

joe

---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:[email protected]

Reply via email to