Messenger API - what am I missing?
Hi. I'm interested in testing Proton against the RabbitMQ AMQP 1.0 adapter. But I'm struggling with the APIs I need to use to write even a simple program. I'm using the Java version but from what I can see the C version has the same APIs. If I try to use the Messenger API then I don't see how I can specify a source or target on any of my links - and indeed the examples I can see showing use of the Messenger API don't do that. Indeed I don't seem to be able to specify very much, but the lack of source / target means I can't specify where I publish to or consume from. And if I run the examples and don't specify source / target I seem to end up sending attach frames with these bits missing - which the spec says means I will never send or receive messages! I tried using the lower level API (Driver / Connector / Connection / Session / Link / Message etc) but gave up when I got to 100 lines of code and hadn't sent a message - I assume I'm not supposed to use them directly? So what am I missing here? I assume there's some part of the API I don't understand... Cheers, Simon -- Simon MacMullen RabbitMQ, VMware
Re: Messenger API - what am I missing?
On Tue, Jan 15, 2013 at 9:33 AM, Simon MacMullen si...@rabbitmq.com wrote: Hi. I'm interested in testing Proton against the RabbitMQ AMQP 1.0 adapter. But I'm struggling with the APIs I need to use to write even a simple program. I'm using the Java version but from what I can see the C version has the same APIs. If I try to use the Messenger API then I don't see how I can specify a source or target on any of my links - and indeed the examples I can see showing use of the Messenger API don't do that. Indeed I don't seem to be able to specify very much, but the lack of source / target means I can't specify where I publish to or consume from. And if I run the examples and don't specify source / target I seem to end up sending attach frames with these bits missing - which the spec says means I will never send or receive messages! I tried using the lower level API (Driver / Connector / Connection / Session / Link / Message etc) but gave up when I got to 100 lines of code and hadn't sent a message - I assume I'm not supposed to use them directly? So what am I missing here? I assume there's some part of the API I don't understand... I'm guessing you need to set an address on the message. Messenger doesn't expose direct control over connections or links. It will figure out what connections/links to establish based on what address you specify on the message (kind of like SMTP). You could use something like amqp://host/target. If you post your messenger code snippet I'd be happy to comment in more detail. --Rafael
Re: Messenger API - what am I missing?
On 15/01/13 15:29, Rafael Schloming wrote: I'm guessing you need to set an address on the message. Messenger doesn't expose direct control over connections or links. It will figure out what connections/links to establish based on what address you specify on the message (kind of like SMTP). You could use something like amqp://host/target. If you post your messenger code snippet I'd be happy to comment in more detail. Thank you! So this was indeed my first idea of how to use it. So with what I suspect is the simplest possible example: Messenger mr = new MessengerImpl(); mr.start(); Message m = new MessageImpl(); m.setAddress(amqp://localhost:5672/queue/test); mr.put(m); mr.send(); I then see Proton setting the name field on the attach frame to /queue/test - and source and target are blank: 1.0 frame decoded: {'v1_0.attach',[{name,{utf8,/queue/test}}, {handle,{uint,0}}, {role,false}, {snd_settle_mode,{ubyte,2}}, {rcv_settle_mode,{ubyte,0}}, {source,undefined}, {target,undefined}, {unsettled,undefined}, {incomplete_unsettled,false}, {initial_delivery_count,{uint,0}}, {max_message_size,undefined}, {offered_capabilities,undefined}, {desired_capabilities,undefined}, {properties,undefined}]} (Please forgive the less-than-beautiful formatting from our adapter.) Cheers, Simon -- Simon MacMullen RabbitMQ, VMware
Re: Messenger API - what am I missing?
Yes, the Python version works as I would expect, modulo: * It strips the leading / from the target address * On my machine, localhost resolves to ::1, and Proton appears not to support IPv6. But both of those can be worked around. Thank you! Cheers, Simon On 15/01/13 16:11, Rafael Schloming wrote: That looks to me like it's a bug, possibly in the Java Messenger implementation, or possibly some kind of interop bug. Any chance you could try the same example in python and see if it works any better? messenger = Messenger() messenger.start() msg = Message() msg.address = amqp://localhost:5672/queue/test messenger.put(msg) messenger.send() messenger.stop() --Rafael On Tue, Jan 15, 2013 at 10:46 AM, Simon MacMullen si...@rabbitmq.com mailto:si...@rabbitmq.com wrote: On 15/01/13 15:29, Rafael Schloming wrote: I'm guessing you need to set an address on the message. Messenger doesn't expose direct control over connections or links. It will figure out what connections/links to establish based on what address you specify on the message (kind of like SMTP). You could use something like amqp://host/target. If you post your messenger code snippet I'd be happy to comment in more detail. Thank you! So this was indeed my first idea of how to use it. So with what I suspect is the simplest possible example: Messenger mr = new MessengerImpl(); mr.start(); Message m = new MessageImpl(); m.setAddress(amqp://__localhost:5672/queue/test); mr.put(m); mr.send(); I then see Proton setting the name field on the attach frame to /queue/test - and source and target are blank: 1.0 frame decoded: {'v1_0.attach',[{name,{utf8,__/queue/test}}, {handle,{uint,0}}, {role,false}, {snd_settle_mode,{ubyte,2}}, {rcv_settle_mode,{ubyte,0}}, {source,undefined}, {target,undefined}, {unsettled,undefined}, {incomplete_unsettled,false}, {initial_delivery_count,{uint,__0}}, {max_message_size,undefined}, {offered_capabilities,__undefined}, {desired_capabilities,__undefined}, {properties,undefined}]} (Please forgive the less-than-beautiful formatting from our adapter.) Cheers, Simon -- Simon MacMullen RabbitMQ, VMware -- Simon MacMullen RabbitMQ, VMware