qpid-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Quynh Duong <quynhduon...@outlook.com>
Subject RE: qpid cpp pub/sub
Date Wed, 02 Jul 2014 16:29:37 GMT
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");            }     
            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: gsim@redhat.com
> To: dev@qpid.apache.org
> 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: dev-unsubscribe@qpid.apache.org
> For additional commands, e-mail: dev-help@qpid.apache.org
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message