Chapter 4. Examples
This chapter demonstrates the use of AMQ C++ through example programs.
See the Qpid Proton C++ examples for more sample programs.
The code presented in this guide uses C++11 features. AMQ C++ is also compatible with C++03, but the code will require 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_);
}
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.
$ g++ send.cpp -o send -std=c++11 -lstdc++ -lqpid-proton-cpp $ ./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_);
}
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.
$ g++ receive.cpp -o receive -std=c++11 -lstdc++ -lqpid-proton-cpp $ ./receive amqp://localhost queue1

Where did the comment section go?
Red Hat's documentation publication system recently went through an upgrade to enable speedier, more mobile-friendly content. We decided to re-evaluate our commenting platform to ensure that it meets your expectations and serves as an optimal feedback mechanism. During this redesign, we invite your input on providing feedback on Red Hat documentation via the discussion platform.