On 05/24/2011 08:59 AM, Angus Salkeld wrote:
HiI am writing an application that needs to talk to a number of agents (say 20+). This Console needs to both receive events and make method calls to the agent (I am doing it using the async API). I had 2 ideas on how to do this: 1) create a ConsoleSession per agent and use setAgentFilter() or subscribe() to restrict the events to the ones I want. - What is the overhead of creating ConsoleSessions? - Should I use setAgentFilter() or subscribe()? - why would I use one over the other? - What is the format of the filter? the same as query() - s-expression - What can I filter on? class/properties/... 2) create only one ConsoleSession and somehow figure out where the events have come from. - Is there an efficient way of determining where an event has come from? (I don't have control of the contents of the event) - what is the scope of the corralation-id (returned from callMethodAsync) session or agent? Would you recommend one way over the other - any other suggestions?
I would recommend option 2 (single ConsoleSession). The ConsoleEvent class has a getAgent method that returns a reference to the agent that raised the event.
Use ConsoleSession::setAgentFilter to narrow the scope of visible agents to the set that you are interested in. Use ConsoleEvent::getAgent to identify the agent that is associated with an async event.
The agent filter is an s-expression string. The identifying fields for an agent are "_vendor", "_product", and "_instance". You can also query on any arbitrary agent-defined attribute that is set by the agent in the setAttribute method. To filter all agents but those of a particular vendor/product pair, use "[and, [eq, _vendor, [quote, 'vendor-name.com']], [eq, _product, [quote, 'product-name']]]".
The scope of the correlation-id is per-Agent which means that you will need the combination of (agent X id) to properly correlate the event. This seems sub-optimal to me and I will raise a Jira requesting that the scope be made per-ConsoleSession.
-Ted
Thanks Angus Salkeld --------------------------------------------------------------------- Apache Qpid - AMQP Messaging Implementation Project: http://qpid.apache.org Use/Interact: mailto:[email protected]
--------------------------------------------------------------------- Apache Qpid - AMQP Messaging Implementation Project: http://qpid.apache.org Use/Interact: mailto:[email protected]
