Here's a C++ program that uses the XML exchange. The only x-bindings argument that is really needed is the xquery, since the subject and the exchange can be specified as part of standard address syntax. I used a stringstream to make it easier to write a query and add it to a template string that creates an address containing that query.

I have a Python program that does the same, using the same address, but it runs into the bug Gordon reported in https://issues.apache.org/jira/browse/QPID-2551.

Hope this is helpful!

Jonathan

#include <qpid/messaging/Connection.h>
#include <qpid/messaging/Message.h>
#include <qpid/messaging/Receiver.h>
#include <qpid/messaging/Sender.h>
#include <qpid/messaging/Session.h>

#include <iostream>
#include <sstream>
using std::stringstream;

using namespace qpid::messaging;

int main(int argc, char** argv) {
  std::string broker = argc > 1 ? argv[1] : "localhost:5672";
  std::string query =
    "let $w := ./weather "
    "return $w/station = 'Raleigh-Durham International Airport (KRDU)' "
    "   and $w/temperature_f > 50"
    "   and $w/temperature_f - $w/dewpoint > 5"
    "   and $w/wind_speed_mph > 7"
    "   and $w/wind_speed_mph < 20";

  stringstream address;

  address << "xml/weather; {"
    " link: { "
    "  x-bindings: [{ arguments: { xquery:\"" << query << "\"} }] "
    " } "
    "}";

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

    Receiver receiver = session.createReceiver(address.str());

    Message message;
    message.setContent(
               "<weather>"
"<station>Raleigh-Durham International Airport (KRDU)</station>"
               "<wind_speed_mph>16</wind_speed_mph>"
               "<temperature_f>70</temperature_f>"
               "<dewpoint>35</dewpoint>"
               "</weather>");
    Sender sender = session.createSender("xml/weather");
    sender.send(message);

    Message response = receiver.fetch();

    std::cout << response.getContent() << std::endl;

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


---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:[email protected]

Reply via email to