[rabbitmq-discuss] Draft of C++ rabbitMq API

Alexandre Kalendarev akalend at mail.ru
Mon Mar 1 11:55:57 GMT 2010


Hi colleagues!

I developed the C++ interface, see below

If You have any ideas - wellcome! 

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 at localhost:5673/somevhost" );

	default connection string is "localhost:5672"
	the debug connection string   AMQPCnnDebug  is "guest:guest at 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  )









More information about the rabbitmq-discuss mailing list