the Draft of C++ API
Connection class
class AMQPConnection {
AMQPConnection();
AMQPConnection( string connectionString );
AMQPConnection( string connectionString , int channelNumber);
void Open( string connectionString );
void Open( string connectionString , int channelNumber);
void Close();
setChannel(int channelNumber);
}
const AMQPCnnDebug = "localhost:5672"
the example:
AMQPConnection * cnn = new AMQPConnection( "guest:guest@localhost:
5673/somevhost" );
default connection string is "localhost:5672"
the debug connection string AMQPCnnDebug is "guest:guest@localhost:
5673"
Exchange class
class AMQPExchange {
AMQPExchange( AMQPConnection * cnn );
void Declare(string name);
void Declare(string name, int parms);
void Declare(string name, int parms, map properties ); // *)?
void Delete(string name)
}
the parms is set of constants as AMQPDurable, AMQPAutodelete etc
the type of exchange is AMQPDirect default or AMQPFanout, or
AMQPTopic
Example:
AMQPExchange * ex = new AMQPExchange(new AMQPConnection());
ex->Declare("my_exchange");
Queue class
class AMQPQueue {
AMQPQueue(AMQPConnection * cnn);
void Declare(string name);
void Declare(string name, int parms);
void Declare(string name, int parms, map properties ); // *)?
void Delete(string name)
void Purge (string name)
}
the parms is set of constants as AMQPDurable, AMQPAutodelete etc
example:
AMQPEQueue * qu = new AMQPEQueue(new AMQPConnection());
qu->Declare("qu_mylife");
Basic class:
class AMQPBasic {
AMQPBasic(AMQPConnection * cnn);
void setProperty(string name, string value );
void setProperty(string name, int value );
void Bind (string exchangeName, string queueName );
void Bind (string exchangeName, string queueName , string key);
void Publish( string exchangeName, string message);
void Publish( string exchangeName, uchar* message);
void Publish( string exchangeName, string message, string key);
void Publish( string exchangeName, uchar* message, string key);
void Cancel( string queueName)
AMQPMessage * Get( string queueName)
void Ask( string queueName ) ????
void Reject( string queueName ) ????
void Consume( string queueName , IAMQPCallback * callbackName );
}
class AMQPMessage ????
int timestamp
int expiration
string contentType
string deliveryTag
uchar* message or string
int number // internal number message
string exchange
string key
....
IAMQPCallback is abstract class, the callbackName is derived from
IAMQPCallback.
after received each the message call the method run of derived
AMQPCallback base class.
*) properties is map of addional property, it will to resolve in
future.
Examples:
// publish message
AMQPConnection * cnn = new AMQPConnection();
AMQPExchange * ex = new AMQPExchange(cnn);
ex->Declare("my_exchange", AMQPTopic);
basic = new AMQPBasic(cnn);
basic->Bind("my_exchange", "qu_mylive", "news" );
basic->Publish("my_exchange", "12345" , "news");
// consume message
class printMessage : IAMQPCallback {
void run (uchar* message) {
std::cout << message << std::endl;
}
}
AMQPConnection * cnn = new AMQPConnection();
basic = new AMQPBasic(cnn);
printMessage * pm = new printMessage();
basic->Consume("qu_mylive", pm);
unrealise classes(it will to resolve in future): AMQPFile,
AMQPStreams etc ...
exceptions:
AMQPnoConnectException
AMQPnonAutorizeException
AMQPnotFoundException
AMQPnotAllowedException
...
AMQPerrorException (AMQPcommandInvalidException )
Максим,
пока я вижу события на подписку - Consume
там предусмотрен кэллбэк:
// consume message
class printMessage : IAMQPCallback ;
передается как-то так:
printMessage * pm = new printMessage();
basic->Consume("qu_mylive", pm);
при каждом эвентсе (приход сообщения, приход отбоя...), будет
вызываться метод run класса printMessage
или можно сделать как-то по другому?
где еще могут быть кэллбеки?
прежде чем кодить, хочу разобраться в архитектуре.
{{{
class pm : AMQPEvent { ... }
basic->addEvent( AMQPReceiveMessage, pm);
basic->Consume("qu_mylive");
}}}
On 1 мар, 20:41, Max Lapshin <m...@maxidoors.ru> wrote:
> А кто будет активировать коллбек?
каллбэк будет активироваться в методе basic->Consume("qu_mylive");
Т.е. только пассивный режим?