示例#1
0
qpid::types::Variant::Map agocontrol::AgoConnection::getInventory() {
	Variant::Map content;
	Variant::Map responseMap;
	content["command"] = "inventory";
	Message message;
	encode(content, message);
	Address responseQueue("#response-queue; {create:always, delete:always}");
	Receiver responseReceiver = session.createReceiver(responseQueue);
	message.setReplyTo(responseQueue);
	sender.send(message);
	try {
		Message response = responseReceiver.fetch(Duration::SECOND * 3);
		session.acknowledge();
		if (response.getContentSize() > 3) {	
			decode(response,responseMap);
		}
	} catch (qpid::messaging::NoMessageAvailable) {
		printf("WARNING, no reply message to fetch\n");
	}
	try {
		responseReceiver.close();
        } catch(const std::exception& error) {
                std::cerr << error.what() << std::endl;
        }
	return responseMap;
}
示例#2
0
int main(int argc, char** argv) {
    std::string broker = argc > 1 ? argv[1] : "localhost:5672";
    std::string address = argc > 2 ? argv[2] : "amq.topic";
    Connection connection(broker); 
    try {
        connection.open();
        Session session = connection.createSession();

        Receiver receiver = session.createReceiver(address);
        Sender sender = session.createSender(address);

        sender.send(Message("Hello world!"));

        Message message = receiver.fetch(Duration::SECOND * 1);
        std::cout << message.getContent() << std::endl;
        session.acknowledge();
        
        connection.close();
        return 0;
    } catch(const std::exception& error) {
        std::cerr << error.what() << std::endl;
        connection.close();
        return 1;   
    }
}
示例#3
0
qpid::types::Variant::Map agocontrol::AgoConnection::sendMessageReply(const char *subject, qpid::types::Variant::Map content) {
        Message message;
	qpid::types::Variant::Map responseMap;
	Receiver responseReceiver;
        try {
                encode(content, message);
                message.setSubject(subject);
		Address responseQueue("#response-queue; {create:always, delete:always}");
		responseReceiver = session.createReceiver(responseQueue);
		message.setReplyTo(responseQueue);
		sender.send(message);
                Message response = responseReceiver.fetch(Duration::SECOND * 3);
		session.acknowledge();
                if (response.getContentSize() > 3) {
                        decode(response,responseMap);
                } else {
			responseMap["response"] = response.getContent();
		}
        } catch (qpid::messaging::NoMessageAvailable) {
                printf("WARNING, no reply message to fetch\n");
        } catch(const std::exception& error) {
                std::cerr << error.what() << std::endl;
        }
	try {
		responseReceiver.close();
        } catch(const std::exception& error) {
                std::cerr << error.what() << std::endl;
        }
        return responseMap;
}
示例#4
0
文件: drain.cpp 项目: ChugR/qpid-cpp
int main(int argc, char** argv)
{
    Options options;
    if (options.parse(argc, argv) && options.checkAddress()) {
        Connection connection;
        try {
            connection = Connection(options.url, options.connectionOptions);
            connection.open();
            Session session = connection.createSession();
            Receiver receiver = session.createReceiver(options.address);
            Duration timeout = options.getTimeout();
            int count = options.getCount();
            Message message;
            int i = 0;

            while (receiver.fetch(message, timeout)) {
                std::cout << message << std::endl;
                session.acknowledge();
                if (count && (++i == count))
                    break;
            }
            receiver.close();
            session.close();
            connection.close();
            return 0;
        } catch(const std::exception& error) {
            std::cout << "Error: " << error.what() << std::endl;
            connection.close();
        }
    }
    return 1;
}
示例#5
0
int main(int argc, char** argv) {
    const char* url = argc>1 ? argv[1] : "amqp:tcp:127.0.0.1:5672";

    try {
        Connection connection = Connection::open(url);
        Session session = connection.newSession();
        Receiver receiver = session.createReceiver("service_queue; {create: always}");

        while (true) {
            Message request = receiver.fetch();
            const Address& address = request.getReplyTo();
            if (address) {
                Sender sender = session.createSender(address);
                std::string s = request.getContent();
                std::transform(s.begin(), s.end(), s.begin(), toupper);
                Message response(s);
                sender.send(response);
                std::cout << "Processed request: " 
                          << request.getContent() 
                          << " -> " 
                          << response.getContent() << std::endl;
                session.acknowledge();
            } else {
                std::cerr << "Error: no reply address specified for request: " << request.getContent() << std::endl;
                session.reject(request);
            }
        }
        connection.close();
        return 0;
    } catch(const std::exception& error) {
        std::cout << error.what() << std::endl;
    }
    return 1;
}
示例#6
0
static int qpidhello(char *br) {
    std::string broker = br ? br : "localhost:5672";
    std::string address = "amq.topic";
    std::string connectionOptions = "";

    Connection connection(broker, connectionOptions);
    try {
        connection.open();
        Session session = connection.createSession();

        Receiver receiver = session.createReceiver(address);
        Sender sender = session.createSender(address);

        sender.send(Message("Hello world!"));

        Message message = receiver.fetch(Duration::SECOND * 1);
        std::cout << message.getContent() << std::endl;
        session.acknowledge();

        connection.close();
        return 0;
    } catch(const std::exception& error) {
        std::cerr << error.what() << std::endl;
        connection.close();
        return 1;
    }
}
示例#7
0
文件: server.cpp 项目: ChugR/qpid-cpp
int main(int argc, char** argv) {
    const char* url = argc>1 ? argv[1] : "amqp:tcp:127.0.0.1:5672";
    std::string connectionOptions = argc > 2 ? argv[2] : "";

    Connection connection(url, connectionOptions);
    try {
        connection.open();
        Session session = connection.createSession();
        Receiver receiver = session.createReceiver("service_queue; {create: always}");

        while (true) {
            Message request = receiver.fetch();
            const Address& address = request.getReplyTo();
            if (address) {
                Sender sender = session.createSender(address);
                Message response;

                qpid::types::Variant requestObj = request.getContentObject();
                if (requestObj.getType() == qpid::types::VAR_STRING) {
                    // Received a string.
                    // Server returns request string in upper case with same encoding.
                    std::string s = requestObj;
                    std::transform(s.begin(), s.end(), s.begin(), toupper);
                    qpid::types::Variant responseObj(s);
                    responseObj.setEncoding( requestObj.getEncoding() );
                    response.setContentObject( responseObj );
                } else {
                    // Received something other than a string.
                    // Server echos received object as a utf8 string.
                    qpid::types::Variant responseObj( requestObj.asString() );
                    responseObj.setEncoding( "utf8" );
                    response.setContentObject( requestObj );
                }
                sender.send(response);
                std::cout << "Processed request: "
                          << request.getContentObject()
                          << " -> "
                          << response.getContentObject() << std::endl;
                session.acknowledge();
                sender.close();
            } else {
                std::cerr << "Error: no reply address specified for request: " << request.getContent() << std::endl;
                session.reject(request);
            }
        }
        connection.close();
        return 0;
    } catch(const std::exception& error) {
        std::cout << error.what() << std::endl;
        connection.close();
    }
    return 1;
}
示例#8
0
 void run()
 {
     try {
         Message message;
         while (receiver.fetch(message)) {
             connection.setOption("reconnect-urls", message.getProperties()["amq.failover"]);
             QPID_LOG(debug, "Set reconnect-urls to " << message.getProperties()["amq.failover"]);
             session.acknowledge();
         }
     }
     catch (const ClosedException&) {}
     catch (const qpid::TransportFailure& e) {
         QPID_LOG(warning, "Failover updates stopped on loss of connection. " << e.what());
     }
     catch (const std::exception& e) {
         QPID_LOG(warning, "Failover updates stopped due to exception: " << e.what());
     }
 }
示例#9
0
int main(int argc, char** argv)
{
    Options options;
    if (options.parse(argc, argv) && options.checkAddress()) {
        Connection connection(options.url, options.connectionOptions);
        try {
            connection.open();
            Session session = connection.createSession();
            Receiver receiver = session.createReceiver(options.address);
            Duration timeout = options.getTimeout();
            int count = options.getCount();
            Message message;
            int i = 0;

            while (receiver.fetch(message, timeout)) {
                std::cout << "Message(properties=" << message.getProperties();
                if (!message.getSubject().empty()) {
                    std::cout << ", subject='" << message.getSubject() << "'";
                }
                std::cout << ", content='";
                if (message.getContentType() == "amqp/map") {
                    std::cout << message.getContentObject().asMap();
                } else {
                    std::cout << message.getContentObject();
                }
                std::cout  << "')" << std::endl;
                session.acknowledge();
                if (count && (++i == count))
                    break;
            }
            receiver.close();
            session.close();
            connection.close();
            return 0;
        } catch(const std::exception& error) {
            std::cout << error.what() << std::endl;
            connection.close();
        }
    }
    return 1;
}
示例#10
0
int main(int argc, char** argv) {
    const char* url = argc>1 ? argv[1] : "amqp:tcp:127.0.0.1:5672";
    std::string connectionOptions = argc > 2 ? argv[2] : "";
    
    Connection connection(url, connectionOptions);
     try {
        connection.open();
        Session session = connection.createSession();

        Sender sender = session.createSender("service_queue");

        //create temp queue & receiver...
        Receiver receiver = session.createReceiver("#");
        Address responseQueue = receiver.getAddress();

	// Now send some messages ...
	string s[] = {
            "Twas brillig, and the slithy toves",
            "Did gire and gymble in the wabe.",
            "All mimsy were the borogroves,",
            "And the mome raths outgrabe."
        };

    	Message request;
        request.setReplyTo(responseQueue);
	for (int i=0; i<4; i++) {
            request.setContent(s[i]);
            sender.send(request);
            Message response = receiver.fetch();
            std::cout << request.getContent() << " -> " << response.getContent() << std::endl;
	}
        connection.close();
        return 0;
    } catch(const std::exception& error) {
        std::cout << error.what() << std::endl;
        connection.close();
    }
    return 1;
}
示例#11
0
int main(int argc, char** argv) {
    std::string broker = argc > 1 ? argv[1] : "localhost:5445";
    std::string address = argc > 2 ? argv[2] : "jms.queue.exampleQueue";

    // Connection options documented at http://qpid.apache.org/releases/qpid-0.30/programming/book/connections.html#connection-options
    std::string connectionOptions = argc > 3 ? argv[3] : "{protocol:amqp1.0}";

    try {
         // Step 3. Create an amqp qpid 1.0 connection
        Connection connection(broker, connectionOptions);
        connection.open();

         // Step 4. Create a session
        Session session = connection.createSession();

         // Step 5. Create a sender
        Sender sender = session.createSender(address);

         // Step 6. send a simple message
        sender.send(Message("Hello world!"));

         // Step 7. create a receiver
        Receiver receiver = session.createReceiver(address);

         // Step 8. receive the simple message
        Message message = receiver.fetch(Duration::SECOND * 1);
        std::cout << "Received a message with this following content \"" << message.getContent() << "\"" << std::endl;

         // Step 9. acknowledge the message
        session.acknowledge();

        // Step 10. close the connection
        connection.close();
        return 0;
    } catch(const std::exception& error) {
        std::cerr << error.what() << std::endl;
        return 1;
    }
}
示例#12
0
int main(int argc, char ** argv)
{
    Connection connection;
    try {
        Options opts;
        if (opts.parse(argc, argv)) {
            connection = Connection(opts.url, opts.connectionOptions);
            connection.open();
            std::auto_ptr<FailoverUpdates> updates(opts.failoverUpdates ? new FailoverUpdates(connection) : 0);
            Session session = opts.tx ? connection.createTransactionalSession() : connection.createSession();
            Receiver receiver = session.createReceiver(opts.address);
            receiver.setCapacity(opts.capacity);
            Message msg;
            uint count = 0;
            uint txCount = 0;
            SequenceTracker sequenceTracker(opts);
            Duration timeout = opts.getTimeout();
            bool done = false;
            Reporter<ThroughputAndLatency> reporter(std::cout, opts.reportEvery, opts.reportHeader);
            if (!opts.readyAddress.empty()) {
                session.createSender(opts.readyAddress).send(msg);
		if (opts.tx)
		    session.commit();
	    }
            // For receive rate calculation
            qpid::sys::AbsTime start = qpid::sys::now();
            int64_t interval = 0;
            if (opts.receiveRate) interval = qpid::sys::TIME_SEC/opts.receiveRate;

            std::map<std::string,Sender> replyTo;

            while (!done && receiver.fetch(msg, timeout)) {
                reporter.message(msg);
                if (sequenceTracker.track(msg)) {
                    if (msg.getContent() == EOS) {
                        done = true;
                    } else {
                        ++count;
                        if (opts.printHeaders) {
                            if (msg.getSubject().size()) std::cout << "Subject: " << msg.getSubject() << std::endl;
                            if (msg.getReplyTo()) std::cout << "ReplyTo: " << msg.getReplyTo() << std::endl;
                            if (msg.getMessageId().size()) std::cout << "MessageId: " << msg.getMessageId() << std::endl;
                            if (msg.getCorrelationId().size()) std::cout << "CorrelationId: " << msg.getCorrelationId() << std::endl;
                            if (msg.getUserId().size()) std::cout << "UserId: " << msg.getUserId() << std::endl;
                            if (msg.getTtl().getMilliseconds()) std::cout << "TTL: " << msg.getTtl().getMilliseconds() << std::endl;
                            if (msg.getPriority()) std::cout << "Priority: " << ((uint) msg.getPriority()) << std::endl;
                            if (msg.getDurable()) std::cout << "Durable: true" << std::endl;
                            if (msg.getRedelivered()) std::cout << "Redelivered: true" << std::endl;
                            std::cout << "Properties: " << msg.getProperties() << std::endl;
                            std::cout << std::endl;
                        }
                        if (opts.printContent) {
                            if (!msg.getContentObject().isVoid()) std::cout << msg.getContentObject() << std::endl;
                            else std::cout << msg.getContent() << std::endl;
                        }
                        if (opts.messages && count >= opts.messages) done = true;
                    }
                }
                if (opts.tx && (count % opts.tx == 0)) {
                    if (opts.rollbackFrequency && (++txCount % opts.rollbackFrequency == 0)) {
                        session.rollback();
                    } else {
                        session.commit();
                    }
                } else if (opts.ackFrequency && (count % opts.ackFrequency == 0)) {
                    session.acknowledge();
                }
                if (msg.getReplyTo() && !opts.noReplies) { // Echo message back to reply-to address.
                    Sender& s = replyTo[msg.getReplyTo().str()];
                    if (s.isNull()) {
                        s = session.createSender(msg.getReplyTo());
                        s.setCapacity(opts.capacity);
                        replyTo[msg.getReplyTo().str()] = s;
                    }
                    msg.setReplyTo(Address(opts.replyto));
                    s.send(msg);
                }
                if (opts.receiveRate) {
                    qpid::sys::AbsTime waitTill(start, count*interval);
                    int64_t delay = qpid::sys::Duration(qpid::sys::now(), waitTill);
                    if (delay > 0) qpid::sys::usleep(delay/qpid::sys::TIME_USEC);
                }
            }
            if (opts.reportTotal) reporter.report();
            if (opts.tx) {
                if (opts.rollbackFrequency && (++txCount % opts.rollbackFrequency == 0)) {
                    session.rollback();
                } else {
                    session.commit();
                }
            } else if (opts.ackFrequency) {
                session.acknowledge();
            }
            session.close();
            connection.close();
            return 0;
        }
    } catch(const std::exception& error) {
        std::cerr << "qpid-receive: " << error.what() << std::endl;
        connection.close();
        return 1;
    }
}
int
main(int argc, char *argv[])
{
	string broker = "amqp:tcp:127.0.0.1:5672";
	string address;

	static struct option options[] = {
		{"broker", 1, NULL, 'b'},
		{"address", 1, NULL, 'a'},
		{NULL, 0, NULL, 0}
	};

	int c;
	while (1) {
		c = getopt_long(argc, argv, ":b:a:", options, NULL);
		if (-1 == c) break;

		switch (c) {
		case 'b':
			broker = optarg;
			break;
		case 'a':
			address = optarg;
			break;
		case ':':
			cerr << argv[optind - 1] << " requires an argument" << endl;
			usage(argv);
			break;
		case '?':
			cerr << "unknown argument: " << argv[optind - 1] << endl;
			usage(argv);
			break;
		default:
			usage(argv);
			break;
		}
	}

	if (address.empty()) {
		cerr << "--address required" << endl;
		usage(argv);
	}

	cout << "config: address = " << address << "; broker = " << broker << endl;

	Connection connection(broker);
	connection.open();
	Session session = connection.createSession();
	Receiver receiver = session.createReceiver(address);
	receiver.setCapacity(1024);

	int count = 0;
	while (1) {
		Message message = receiver.fetch();
		Variant::Map content;
		decode(message, content);

		string id = message.getSubject();

		if ("DONE" == id) {
			session.acknowledge();
			break;
		}

		for (qpid::types::Variant::Map::const_iterator i = content.begin();
			 content.end() != i;
			 i++) {
			cout << id << " " << (*i).first << " " << (*i).second << endl;
		}
		if (!(++count % 128)) session.acknowledge();
	}
	session.acknowledge();

	receiver.close();
	connection.close();

	return 0;
}
void RequestResponse::run()
{
    const char *options[] = {"", "--log-enable", "trace+", "--log-to-stdout", "on", "--log-time", "on", "--log-level", "on"};
    Logger::configure(9, options);

    std::string url = "amqp:ssl:" + _options.getHost() + ":" + std::to_string(_options.getPort());

    Connection connection(url, "{ protocol: amqp1.0 }");
    connection.setOption("sasl_mechanisms", "EXTERNAL");
    connection.setOption("heartbeat", "30");

    Address reply(_replyAddress);
    Address request(_requestAddress);
    Address response(_responseAddress);

    Duration timeout = Duration::SECOND * _options.getTimeout();

    try
    {
        connection.open();
        Session session = connection.createSession();

        std::cout << "-I- Connection opened, session created" << std::endl;

        Sender sender = session.createSender(request);
        sender.setCapacity(_capacity);

        std::cout << "-I- Sender created " << sender.getName() << std::endl;

        Receiver receiver = session.createReceiver(response);
        receiver.setCapacity(_capacity);

        std::cout << "-I- Receiver created " << receiver.getName() << std::endl;

        Message requestMsg("<FIXML>...</FIXML>");
        requestMsg.setDurable(false);
        requestMsg.setReplyTo(reply);
        sender.send(requestMsg, true);

        std::cout << "-I- Request message sent" << std::endl;

        try
        {
            Message responseMsg = receiver.fetch(timeout);

            std::cout << "-I- Received message with content: " << responseMsg.getContent() << std::endl;

            session.acknowledge(true);

            _messageCounter++;
        }
        catch (NoMessageAvailable noMessage)
        {
            std::cout << "-I- No message received for " << timeout.getMilliseconds()/1000 << " seconds" << std::endl;
        }

        session.sync(true);

        sender.close();
        receiver.close();
        session.close();
        connection.close();
    }
    catch (const std::exception &error)
    {
        connection.close();
        std::cerr << "-E- Caught exception: " << error.what() << std::endl;
        throw error;
    }
}
示例#15
0
int main(int argc, char** argv)
{
/***
    sample emp addresses
    src_emp = "uprr.l.uprr.0000:tmc";
    dst_emp = "bnsf.l.bnsf.0000:tmc";
    wiu_emp = "uprr.w.003074:28.wiu";
***/
    struct emp_header_light holder;

    bool has_host = false;
    bool has_port = false;
    bool has_target = false;

    std::string src_emp;
    std::string dst_emp;
    std::string wiu_emp;
    std::string target;
    unsigned short msg_id;
    std::string host = "127.0.0.1";
    std::string port = "10002";

    int i;

    if(!(argc % 2) || (argc < 3))
    {
        print_usage(argv[0]);
        exit(-1);
    }

    for(i = 1; i < argc; ++i)
    {
        if('-' == argv[i][0])
        {
            if('q' == argv[i][1])
            {
                target = argv[++i];
                has_target = true;
            } 
            else if('h' == argv[i][1])
            {
                host = argv[++i];
                has_host = true;
            } 
            else if('p' == argv[i][1])
            {
                port = argv[++i];
                has_port = true;
            } 
        }
    } 

    if(false == has_target)
    {
        print_usage(argv[0]);
        exit(-1);
    }     

    cout << "queue: " << target << endl;
    cout << "host: " << host << endl;
    cout << "port: " << port << endl;

    std::string connection_url = "amqp://*****:*****@" + host + ":" + port;

    cout << "connection url: " << connection_url << endl;

    Connection connection(connection_url, "");

//    Connection connection("amqp://*****:*****@127.0.0.1:10002", "");

    try
    {
        int i = 0;

        connection.open();
        Session session = connection.createSession();

//        Sender sender = session.createSender("uprr.b.wsrs.ToApplication");
        Receiver receiver = session.createReceiver(target);
        receiver.setCapacity(10);

        Message message;
	unsigned long long int received_msg = 1;

        while(receiver.fetch(message, Duration::FOREVER))
        {
           // printf("Start\n");
           string tmp2 = message.getContent();
           printf("\n=========================== %u ==========================\n\n", received_msg++);
           print_hex((char *)tmp2.c_str(), tmp2.length());
           printf("%u\n",received_msg++);
	       redirect_full_emp(tmp2);
           //recordreceivetime();
           session.acknowledge();
        }
            
	receiver.close();

        session.sync();
        session.close();            
        connection.close();

    } catch(const std::exception& error) {
        std::cout << error.what() << std::endl;
        connection.close();
        exit(-1);   
    }
    return 0;   
}