On 01/20/2010 06:54 PM, Adam Crain wrote:
Hi,
I have an application that needs to both read and write messages to a
broker, i.e. events can come from two sources
1) the broker, something I've setup callbacks for
2) the outside world, for arguments sake say someone presses a
button
Can I make read/write equally responsive using a single Session object?
i.e. can I launch a thread to handle my subscriptions, i.e.:
connection.open(host, port);
Session session = connection.newSession();
SubscriptionManager subscriptions(session);
Listener listener(subscriptions);
subscriptions.subscribe(listener, "message_queue");
subscriptions.start(); //non-blocking call, starts another thread, runs
until stop is called
There is a bug with start() that does not allow you to handle any
exceptions making that unreliable. However you can yourself create a
separate dispatch thread and call SubscriptionManager::run() on it.
(This is all start() does, and by doing so yourself you could catch and
handle exceptions).
and then continue on in the parent thread responding to events from the
other source:
void OnEvent()
{
message.getDeliveryProperties().setRoutingKey("routing_key");
message.setData("Hi, Mom!");
session.messageTransfer(arg::content=message,
arg::destination="amq.direct");
}
It should certainly be safe to send messages on the same session from
one thread while processing messages received on that session from another.
However, unless there is any need to have them on the same session (e.g.
you need to transactionally tie the input and output streams together
into atomic chunks), I would probably create a separate session for sending.
These were just code fragments taken from
http://qpid.apache.org/docs/api/cpp/html/index.html. Any insight you can
provide into this would be appreciated.
Adam Crain
Manager of R&D
Plymouth Systems, Inc.
919-428-1002
---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project: http://qpid.apache.org
Use/Interact: mailto:[email protected]