Hi Gordon,
Thanks for the prompt reply, I would like to further clarify my problem.
I am currently running the QPID JMS client and QPID CPP API against JBOSS A-MQ
6.1 on AMQP 1.0 protocol. I am still having trouble initiating a 1pub/2sub
model where the pub is java and the sub is c++. I have tried different address
options however I am still unable to emulate AMQP "private queue bound to
exchange" approach to pub/sub.
Also JBOSS A-MQ seems to not like subjects, since every time I add "/<subject>"
to the address, the sub application will fail to receive messages. Anyway here
comes the code:
//Java code starts//using Qpid Java client 0.28 AMQP1.0 librariespackage
org.apache.qpid.amqp_1_0.jms.example;import javax.jms.*;import
javax.naming.Context;import javax.naming.InitialContext;import
java.util.Hashtable;
public class Spout{ public Spout() { }
@SuppressWarnings({ "rawtypes", "unchecked" }) public static void
main(String[] args) { try {
Class.forName("org.apache.qpid.amqp_1_0.jms.jndi.PropertiesFileInitialContextFactory");
Hashtable env = new Hashtable();
env.put("java.naming.provider.url", "hello.properties");
env.put("java.naming.factory.initial",
"org.apache.qpid.amqp_1_0.jms.jndi.PropertiesFileInitialContextFactory");
Context context = new InitialContext(env);
ConnectionFactory connectionFactory = (ConnectionFactory)
context.lookup("localhost"); Connection connection =
connectionFactory.createConnection(); connection.start();
Session producersession = connection.createSession(false,
Session.AUTO_ACKNOWLEDGE); Destination topic =
producersession.createTopic("news"); //if i change the address to
"news/somestuff" sub can't see, even if addresses match
int count = 2;
MessageProducer producer = producersession.createProducer(topic);
for (int i=0; i < count; i++) {
Message msg = producersession.createTextMessage("Hello news!");
producer.send(msg); System.out.println("\n-------------
Msg -------------"); System.out.println(msg);
System.out.println("-------------------------------\n"); }
producer.close();
connection.close(); context.close(); }
catch (Exception exp) { System.out.println("Caught exception:
" + exp.getMessage()); exp.printStackTrace(); } }}//Java
code ends
//C++ code starts#include <qpid/messaging/Connection.h>#include
<qpid/messaging/Message.h>#include <qpid/messaging/Message_io.h>#include
<qpid/messaging/Receiver.h>#include <qpid/messaging/Session.h>
#include <iostream>
using namespace qpid::messaging;using namespace qpid::types;using namespace std;
int main(){ Connection connection; try { string url =
"localhost:5672"; string connectionOptions = "{protocol:amqp1.0}";
string address = "news"; //if i change the address to "news/somestuff" sub
can't see, even if addresses match
connection = Connection(url, connectionOptions);
connection.open(); Session session = connection.createSession();
Receiver receiver = session.createReceiver(address); Duration timeout =
300 * Duration::SECOND; int count = 5; 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;}//C++ code ends
This email is from me, Quynh D.
This is to make sure things are not screwed up by spammers.
> Date: Wed, 2 Jul 2014 11:09:03 +0100
> From: [email protected]
> To: [email protected]
> Subject: Re: qpid cpp pub/sub
>
> On 07/02/2014 10:47 AM, Quynh Duong wrote:
> > I'm a cpp developer and new to the qpid world. I have spent over a day
> > tooling around with qpid cpp api and I was wondering how can I create a
> > pub/sub model, since all the examples that come with the package doesn't
> > give any hints on how it can be done. Things like binding-keys and such
> > that exist on the JMS client doesn't seem to be available in the cpp api,
> > or I must have overlooked. I am running and building all this on CentOS 6.5.
> > Please help, thank you.
>
> It depends on the broker (or equivalent) you want to run against. If you
> are using one of the Qpid brokers, you can just send/receive to/from a
> particular exchange.
>
> E.g. if you specify amq.topic/*.news as the address for your receiver,
> then you can e.g. send to amq.topic setting different subjects on the
> message, and subjects like europe.news or usa.news would be received by
> the receiver whereas as usa.weather would not.
>
> A more simple case would just be using e.g. amq,fanout for both sender
> and receivers and then all messages to the topic will be received by all
> receivers, i.e. with no wildcard filtering.
>
> Have a look at
> http://qpid.apache.org/releases/qpid-0.28/programming/book/section-addresses.html
>
> for a brief description, and feel free to ask any further questions you
> have!
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
>