Ejemplo n.º 1
0
int
onMessage(AMQPMessage *message, void *ctx)
{
    std::string *msg = static_cast<std::string*>(ctx);

    const std::string &data = message->getMessage();

    std::cout << data << std::endl;
    std::cout << std::endl;

    i++;

    uint32_t delivery_tag = message->getDeliveryTag();
    AMQPQueue *queue = message->getQueue();

    std::cout << *msg << " #" << i << ", tag = " << delivery_tag << std::endl;

    std::cout << "Content-type: " << message->getHeader("Content-type") << std::endl;
    std::cout << "Encoding: "<< message->getHeader("Content-encoding") << std::endl;
    std::cout << "Delivery-mode: " << message->getHeader("Delivery-mode") << std::endl;

    std::cout << "========================" << std::endl;

    queue->Ack(delivery_tag);

    /*
    if (i > 10) {
        AMQPQueue *q = message->getQueue();
        std::cout << "Consumer tag: " << message->getConsumerTag() << std::endl;
        q->Cancel(message->getConsumerTag());
    }
    */

    return 0;
};
Ejemplo n.º 2
0
void publish() {
    try {
        reconnects++;
        std::cout << "Connecting:" << reconnects << "..." << std::endl;

        srand((unsigned)time(0));
        std::stringstream ss;
        ss << "guest:guest@localhost:" << ports[rand() % 3];

        AMQP amqp(ss.str());

        AMQPExchange * ex = amqp.createExchange("hello-exchange");
        ex->Declare("hello-exchange", "direct");

        AMQPQueue * queue = amqp.createQueue("hello-queue");
        queue->Declare();
        queue->Bind( "hello-exchange", "hola");

        std::cout << "Connected." << std::endl;
        reconnects = 0;

        ex->setHeader("Content-type", "text/text");
        ex->setHeader("Content-encoding", "UTF-8");

        std::string routing_key("hola");

        int counter = 0;
        ISynchronizedQueue<protocol_t>* pQ=(ISynchronizedQueue<protocol_t>*)m_q;
        while(true)
        {
            boost::this_thread::sleep( boost::posix_time::milliseconds(50) );

            protocol_t  protocol;
            while (pQ->get(protocol)) {
                ex->Publish(protocol, routing_key);
                counter++;
                std::cout << protocol << std::endl;
                /*
                if (0 == counter % 1000) {
                    cout << protocol << endl;
                }
                */
            }
        }

    } catch (AMQPException e) {
        std::cout << e.getMessage() << std::endl;
        boost::this_thread::sleep( boost::posix_time::milliseconds(3000) );
        publish();
    }
}
Ejemplo n.º 3
0
int main (int argc, char** argv) {



	try {
//		AMQP amqp;
//		AMQP amqp(AMQPDEBUG);
	
		AMQP amqp("guest:[email protected]:5672/");		// all connect string

		AMQPExchange * ex = amqp.createExchange("e");
		ex->Declare("e", "fanout");

		AMQPQueue * qu2 = amqp.createQueue("q2");
		qu2->Declare();
		qu2->Bind( "e", "");		

		std::string ss = "message 1 ";
		/* test very long message
		ss = ss+ss+ss+ss+ss+ss+ss;
		ss += ss+ss+ss+ss+ss+ss+ss;
		ss += ss+ss+ss+ss+ss+ss+ss;
		ss += ss+ss+ss+ss+ss+ss+ss;
		ss += ss+ss+ss+ss+ss+ss+ss;
*/

		ex->setHeader("Delivery-mode", 2);
		ex->setHeader("Content-type", "text/text");
		ex->setHeader("Content-encoding", "UTF-8");

		ex->Publish(  ss , ""); // publish very long message
		
		ex->Publish(  "message 2 " , "");
		ex->Publish(  "message 3 " , "");
		
		
		if (argc==2) {
			AMQPQueue * qu = amqp.createQueue();			
			qu->Cancel(   amqp_cstring_bytes(argv[1]) );
		}												
						
	} catch (AMQPException e) {
		std::cout << e.getMessage() << std::endl;
	}

	return 0;

}
Ejemplo n.º 4
0
int  onMessage( AMQPMessage * message  ) {

	char * data = message->getMessage();
	if (data)
		  cout << data << endl;

	i++;

	cout << "#" << i << " tag="<< message->getDeliveryTag() << " content-type:"<< message->getHeader("Content-type") ;
	cout << " encoding:"<< message->getHeader("Content-encoding")<< " mode="<<message->getHeader("Delivery-mode")<<endl;

	if (i > 10) {
		AMQPQueue * q = message->getQueue();
		q->Cancel( message->getConsumerTag() );
	}
	return 0;
};
void PostOffice::Pimpl::RunReceiverThread(const std::string& connectString)
{
    std::set<slaim::MessageType> mySubscriptions;
    bool error = false;

    while (!killed) {
        try {
            AMQP amqp(connectString);
            AMQPExchange* exchange = amqp.createExchange();
            DeclareExchange(exchange);
            AMQPQueue* queue = amqp.createQueue();
            DeclareQueue(queue);

            for (const auto& messageType : mySubscriptions) {
                queue->Bind(exchangeName, messageType);
            }

            std::function<int(AMQPMessage*)> onMessage = [this](AMQPMessage* m) {
                return HandleReceivedMessage(m);
            };

            queue->addEvent(AMQP_MESSAGE, onMessage);

            receiverOk = true;
            if (error) {
                error = false;
                std::lock_guard<std::mutex> lock(errorLogMutex);
                errorLog.SetError("Receiver now ok");
            }

            while (!killed) {
                SubscribeAction subscribeAction;
                while (pendingSubscribeActions.pop_front(subscribeAction)) {
                    if (subscribeAction.subscribe) {
                        mySubscriptions.insert(subscribeAction.messageType);
                        queue->Bind(exchangeName, subscribeAction.messageType);
                    }
                    else {
                        mySubscriptions.erase(subscribeAction.messageType);
                        queue->unBind(exchangeName, subscribeAction.messageType);
                    }
                }

                queue->Consume(AMQP_NOACK);
            }
        }
        catch (std::exception& e) {
            receiverOk = false;
            if (!error) {
                error = true;
                std::lock_guard<std::mutex> lock(errorLogMutex);
                errorLog.SetError("Receiver: " + std::string(e.what()));
            }
            std::this_thread::sleep_for(std::chrono::seconds(1));
        }
    }
}