Chapter 4. Examples
Chapter 4. Examples This chapter demonstrates the use of AMQ C++ through example programs. For more examples, see the AMQ C++ example suite and the Qpid Proton C++ examples . Note The code presented in this guide uses C++11 features. AMQ C++ is also compatible with C++03, but the code requires minor modifications. 4.1. Sending messages This client program connects to a server using <connection-url> , creates a sender for target <address> , sends a message containing <message-body> , closes the connection, and exits. Example: Sending messages #include <proton/connection.hpp> #include <proton/container.hpp> #include <proton/message.hpp> #include <proton/messaging_handler.hpp> #include <proton/sender.hpp> #include <proton/target.hpp> #include <iostream> #include <string> struct send_handler : public proton::messaging_handler { std::string conn_url_ {}; std::string address_ {}; std::string message_body_ {}; void on_container_start(proton::container& cont) override { cont.connect(conn_url_); // To connect with a user and password: // // proton::connection_options opts {}; // opts.user("<user>"); // opts.password("<password>"); // // cont.connect(conn_url_, opts); } void on_connection_open(proton::connection& conn) override { conn.open_sender(address_); } void on_sender_open(proton::sender& snd) override { std::cout << "SEND: Opened sender for target address '" << snd.target().address() << "'\n"; } void on_sendable(proton::sender& snd) override { proton::message msg {message_body_}; snd.send(msg); std::cout << "SEND: Sent message '" << msg.body() << "'\n"; snd.close(); snd.connection().close(); } }; int main(int argc, char** argv) { if (argc != 4) { std::cerr << "Usage: send <connection-url> <address> <message-body>\n"; return 1; } send_handler handler {}; handler.conn_url_ = argv[1]; handler.address_ = argv[2]; handler.message_body_ = argv[3]; proton::container cont {handler}; try { cont.run(); } catch (const std::exception& e) { std::cerr << e.what() << "\n"; return 1; } return 0; } Running the example To run the example program, copy it to a local file, compile it, and execute it from the command line. For more information, see Chapter 3, Getting started . USD g++ send.cpp -o send -std=c++11 -lstdc++ -lqpid-proton-cpp USD ./send amqp://localhost queue1 hello 4.2. Receiving messages This client program connects to a server using <connection-url> , creates a receiver for source <address> , and receives messages until it is terminated or it reaches <count> messages. Example: Receiving messages #include <proton/connection.hpp> #include <proton/container.hpp> #include <proton/delivery.hpp> #include <proton/message.hpp> #include <proton/messaging_handler.hpp> #include <proton/receiver.hpp> #include <proton/source.hpp> #include <iostream> #include <string> struct receive_handler : public proton::messaging_handler { std::string conn_url_ {}; std::string address_ {}; int desired_ {0}; int received_ {0}; void on_container_start(proton::container& cont) override { cont.connect(conn_url_); // To connect with a user and password: // // proton::connection_options opts {}; // opts.user("<user>"); // opts.password("<password>"); // // cont.connect(conn_url_, opts); } void on_connection_open(proton::connection& conn) override { conn.open_receiver(address_); } void on_receiver_open(proton::receiver& rcv) override { std::cout << "RECEIVE: Opened receiver for source address '" << rcv.source().address() << "'\n"; } void on_message(proton::delivery& dlv, proton::message& msg) override { std::cout << "RECEIVE: Received message '" << msg.body() << "'\n"; received_++; if (received_ == desired_) { dlv.receiver().close(); dlv.connection().close(); } } }; int main(int argc, char** argv) { if (argc != 3 && argc != 4) { std::cerr << "Usage: receive <connection-url> <address> [<message-count>]\n"; return 1; } receive_handler handler {}; handler.conn_url_ = argv[1]; handler.address_ = argv[2]; if (argc == 4) { handler.desired_ = std::stoi(argv[3]); } proton::container cont {handler}; try { cont.run(); } catch (const std::exception& e) { std::cerr << e.what() << "\n"; return 1; } return 0; } Running the example To run the example program, copy it to a local file, compile it, and execute it from the command line. For more information, see Chapter 3, Getting started . USD g++ receive.cpp -o receive -std=c++11 -lstdc++ -lqpid-proton-cpp USD ./receive amqp://localhost queue1
#include <proton/connection.hpp> #include <proton/container.hpp> #include <proton/message.hpp> #include <proton/messaging_handler.hpp> #include <proton/sender.hpp> #include <proton/target.hpp> #include <iostream> #include <string> struct send_handler : public proton::messaging_handler { std::string conn_url_ {}; std::string address_ {}; std::string message_body_ {}; void on_container_start(proton::container& cont) override { cont.connect(conn_url_); // To connect with a user and password: // // proton::connection_options opts {}; // opts.user("<user>"); // opts.password("<password>"); // // cont.connect(conn_url_, opts); } void on_connection_open(proton::connection& conn) override { conn.open_sender(address_); } void on_sender_open(proton::sender& snd) override { std::cout << "SEND: Opened sender for target address '" << snd.target().address() << "'\n"; } void on_sendable(proton::sender& snd) override { proton::message msg {message_body_}; snd.send(msg); std::cout << "SEND: Sent message '" << msg.body() << "'\n"; snd.close(); snd.connection().close(); } }; int main(int argc, char** argv) { if (argc != 4) { std::cerr << "Usage: send <connection-url> <address> <message-body>\n"; return 1; } send_handler handler {}; handler.conn_url_ = argv[1]; handler.address_ = argv[2]; handler.message_body_ = argv[3]; proton::container cont {handler}; try { cont.run(); } catch (const std::exception& e) { std::cerr << e.what() << "\n"; return 1; } return 0; } g++ send.cpp -o send -std=c++11 -lstdc++ -lqpid-proton-cpp ./send amqp://localhost queue1 hello #include <proton/connection.hpp> #include <proton/container.hpp> #include <proton/delivery.hpp> #include <proton/message.hpp> #include <proton/messaging_handler.hpp> #include <proton/receiver.hpp> #include <proton/source.hpp> #include <iostream> #include <string> struct receive_handler : public proton::messaging_handler { std::string conn_url_ {}; std::string address_ {}; int desired_ {0}; int received_ {0}; void on_container_start(proton::container& cont) override { cont.connect(conn_url_); // To connect with a user and password: // // proton::connection_options opts {}; // opts.user("<user>"); // opts.password("<password>"); // // cont.connect(conn_url_, opts); } void on_connection_open(proton::connection& conn) override { conn.open_receiver(address_); } void on_receiver_open(proton::receiver& rcv) override { std::cout << "RECEIVE: Opened receiver for source address '" << rcv.source().address() << "'\n"; } void on_message(proton::delivery& dlv, proton::message& msg) override { std::cout << "RECEIVE: Received message '" << msg.body() << "'\n"; received_++; if (received_ == desired_) { dlv.receiver().close(); dlv.connection().close(); } } }; int main(int argc, char** argv) { if (argc != 3 && argc != 4) { std::cerr << "Usage: receive <connection-url> <address> [<message-count>]\n"; return 1; } receive_handler handler {}; handler.conn_url_ = argv[1]; handler.address_ = argv[2]; if (argc == 4) { handler.desired_ = std::stoi(argv[3]); } proton::container cont {handler}; try { cont.run(); } catch (const std::exception& e) { std::cerr << e.what() << "\n"; return 1; } return 0; } g++ receive.cpp -o receive -std=c++11 -lstdc++ -lqpid-proton-cpp ./receive amqp://localhost queue1