You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@activemq.apache.org by nmittal <nm...@rblt.com> on 2009/09/07 03:45:54 UTC

PERL/STOMP: How to Request Response

Hi, I am trying to implement request response with a Perl Client using stomp.
the documentation on the ActiveMQ website has sample code in JAVA that
created a temporary destination and then sets the replyto header to this
temp destination. 
How can I create a temporary destination in Perl STOMP client. I am using
Net::Stomp.

thanks for the help.

Nishant
-- 
View this message in context: http://www.nabble.com/PERL-STOMP%3A-How-to-Request-Response-tp25323954p25323954.html
Sent from the ActiveMQ - User mailing list archive at Nabble.com.


Re: PERL/STOMP: How to Request Response

Posted by Roger Hoover <ro...@gmail.com>.
Oh I see.  I didn't look at your example carefully enough.  Thanks!

On Tue, Sep 8, 2009 at 11:04 AM, nmittal <nm...@rblt.com> wrote:

>
> Roger, single connection is needed only in one script. So the requester
> would
> have one connection and the responder would have another. I was using 2
> connections in the requester and that was breaking it. I think, temporary
> queues are tied to a single instance of the connection.
>
> thanks
> Nishant
>
>
> Roger Hoover wrote:
> >
> > Hi Dejan,
> >
> > I'm not seeing how this feature is useful if you have to have a single
> > connection.  Usually, the whole point of request/response, is to have the
> > request processed elsewhere by some other process (perhaps on another
> > machine) with it's own connection.  If it only works on the same
> > connection,
> > I don't see the point of using a queue to distribute the work.
> >
> > Please let me know if I'm missing something.  Thanks,
> >
> > Roger
> >
> > On Tue, Sep 8, 2009 at 6:54 AM, Dejan Bosanac <de...@nighttale.net>
> wrote:
> >
> >> Hi Nishant,
> >>
> >> just committed a test case that shows that stomp works nice with temp
> >> destinations
> >>
> >> here it is
> >>
> >>    public void testTempDestination() throws Exception {
> >>
> >>        String frame = "CONNECT\n" + "login: system\n" + "passcode:
> >> manager\n\n" + Stomp.NULL;
> >>        stompConnection.sendFrame(frame);
> >>
> >>        frame = stompConnection.receiveFrame();
> >>        assertTrue(frame.startsWith("CONNECTED"));
> >>
> >>        frame = "SUBSCRIBE\n" + "destination:/temp-queue/" +
> >> getQueueName()
> >> + "\n" + "ack:auto\n\n" + Stomp.NULL;
> >>        stompConnection.sendFrame(frame);
> >>
> >>        frame = "SEND\n" + "destination:/temp-queue/" + getQueueName() +
> >> "\n\n" + "Hello World" + Stomp.NULL;
> >>        stompConnection.sendFrame(frame);
> >>
> >>        StompFrame message = stompConnection.receive(1000);
> >>        assertEquals("Hello World", message.getBody());
> >>    }
> >>
> >> Can you try using one connection in your client code for starters and
> see
> >> if
> >> it works.
> >>
> >> If you cannot make your stomp implementation to work with temp
> >> destinations,
> >> you can use regular queues and selectors as described in this thread
> >>
> >>
> http://www.nabble.com/Implement-request-response-with-JMS-over-Stomp-td24914033.html
> >>
> >> Cheers
> >> --
> >> Dejan Bosanac
> >>
> >> Open Source Integration - http://fusesource.com/
> >> ActiveMQ in Action - http://www.manning.com/snyder/
> >> Blog - http://www.nighttale.net
> >>
> >>
> >> On Tue, Sep 8, 2009 at 5:22 AM, nmittal <nm...@rblt.com> wrote:
> >>
> >> >
> >> > Dejan, Thanks for your reply. I have been trying that... I am trying
> >> with
> >> 2
> >> > stomp connections, one that subscribes to '/temp-queue/tq' and one
> that
> >> > sends a message to /queue/Queue.Data with reply to as the above
> >> temp-queue.
> >> > my client code is below..
> >> >
> >> > my $stomp = Net::Stomp->new( { hostname => "192.168.42.30", port =>
> >> '61613'
> >> > } );
> >> > $stomp->connect();
> >> >
> >> > my $stomp1 = Net::Stomp->new( { hostname => "192.168.42.30", port =>
> >> > '61613'
> >> > } );
> >> > $stomp1->connect();
> >> > $stomp1->subscribe(
> >> >      {   destination             => '/temp-queue/tq',
> >> >          'ack'                   => 'auto',
> >> >          'activemq.prefetchSize' => 1,
> >> >      }
> >> >  );
> >> >
> >> > my %head;
> >> > $head{destination} = '/queue/Queue.Data';
> >> > $head{"reply-to"} = '/temp-queue/tq';
> >> >
> >> > my $frame = Net::Stomp::Frame->new(
> >> >       { command => "SEND", headers => \%head, body =>
> >> to_json(\%request)
> >> }
> >> > );
> >> >
> >> > $stomp->send_frame($frame);
> >> >
> >> > while (1) {
> >> >    my $frame1 = $stomp1->receive_frame;
> >> >    my $json1 = $frame1->body;
> >> >
> >> >    print "$json1\n";
> >> > }
> >> >
> >> > --------
> >> >
> >> > on the server, I subscribe to /queue/Queue.Data and send the reply
> back
> >> on
> >> > the destination that is in the reply-to header. please see server code
> >> > below...
> >> >
> >> > my $stomp = Net::Stomp->new( { hostname => $broker, port => '61613' }
> >> );
> >> > $stomp->connect();
> >> > $stomp->subscribe(
> >> >      {   destination             => '/queue/Queue.Data',
> >> >          'ack'                   => 'client',
> >> >          'activemq.prefetchSize' => 1,
> >> >      }
> >> >  );
> >> >
> >> >
> >> > while (1) {
> >> >    my $frame = $stomp->receive_frame;
> >> >
> >> >    if (defined($frame->headers->{"reply-to"})) {
> >> >                my %head;
> >> >                $head{destination} = $frame->headers->{"reply-to"};
> >> >
> >> >                my $frame1= Net::Stomp::Frame->new(
> >> >               { command => "SEND", headers => \%head, body => "This is
> >> the
> >> > response from server" } );
> >> >
> >> >                $stomp->send_frame($frame1);
> >> >    }
> >> >
> >> >    $stomp->ack( { frame => $frame } );
> >> > }
> >> > $stomp->disconnect;
> >> >
> >> > --
> >> >
> >> > I see that the request is being sent and received but the reply never
> >> makes
> >> > it to the client. What am I doing wrong?
> >> >
> >> > thanks
> >> > Nishant
> >> >
> >> >
> >> >
> >> >
> >> > Dejan Bosanac wrote:
> >> > >
> >> > > Hi,
> >> > >
> >> > > use /temp-topic/ or /temp-queue/ prefixes (instead of /topic/ and
> >> > /queue/)
> >> > > for destination names and ActiveMQ will create temporary
> >> destinations.
> >> > >
> >> > > Cheers
> >> > > --
> >> > > Dejan Bosanac
> >> > >
> >> > > Open Source Integration - http://fusesource.com/
> >> > > ActiveMQ in Action - http://www.manning.com/snyder/
> >> > > Blog - http://www.nighttale.net
> >> > >
> >> > >
> >> > > On Mon, Sep 7, 2009 at 3:45 AM, nmittal <nm...@rblt.com> wrote:
> >> > >
> >> > >>
> >> > >> Hi, I am trying to implement request response with a Perl Client
> >> using
> >> > >> stomp.
> >> > >> the documentation on the ActiveMQ website has sample code in JAVA
> >> that
> >> > >> created a temporary destination and then sets the replyto header to
> >> this
> >> > >> temp destination.
> >> > >> How can I create a temporary destination in Perl STOMP client. I am
> >> > using
> >> > >> Net::Stomp.
> >> > >>
> >> > >> thanks for the help.
> >> > >>
> >> > >> Nishant
> >> > >> --
> >> > >> View this message in context:
> >> > >>
> >> >
> >>
> http://www.nabble.com/PERL-STOMP%3A-How-to-Request-Response-tp25323954p25323954.html
> >> > >> Sent from the ActiveMQ - User mailing list archive at Nabble.com.
> >> > >>
> >> > >>
> >> > >
> >> > >
> >> > > -----
> >> > > Dejan Bosanac
> >> > >
> >> > > Open Source Integration - http://fusesource.com/
> >> > > ActiveMQ in Action - http://www.manning.com/snyder/
> >> > > Blog - http://www.nighttale.net
> >> > >
> >> >
> >> > --
> >> > View this message in context:
> >> >
> >>
> http://www.nabble.com/PERL-STOMP%3A-How-to-Request-Response-tp25323954p25339442.html
> >> > Sent from the ActiveMQ - User mailing list archive at Nabble.com.
> >> >
> >> >
> >>
> >
> >
>
> --
> View this message in context:
> http://www.nabble.com/PERL-STOMP%3A-How-to-Request-Response-tp25323954p25351243.html
> Sent from the ActiveMQ - User mailing list archive at Nabble.com.
>
>

Re: PERL/STOMP: How to Request Response

Posted by nmittal <nm...@rblt.com>.
Roger, single connection is needed only in one script. So the requester would
have one connection and the responder would have another. I was using 2
connections in the requester and that was breaking it. I think, temporary
queues are tied to a single instance of the connection.

thanks
Nishant


Roger Hoover wrote:
> 
> Hi Dejan,
> 
> I'm not seeing how this feature is useful if you have to have a single
> connection.  Usually, the whole point of request/response, is to have the
> request processed elsewhere by some other process (perhaps on another
> machine) with it's own connection.  If it only works on the same
> connection,
> I don't see the point of using a queue to distribute the work.
> 
> Please let me know if I'm missing something.  Thanks,
> 
> Roger
> 
> On Tue, Sep 8, 2009 at 6:54 AM, Dejan Bosanac <de...@nighttale.net> wrote:
> 
>> Hi Nishant,
>>
>> just committed a test case that shows that stomp works nice with temp
>> destinations
>>
>> here it is
>>
>>    public void testTempDestination() throws Exception {
>>
>>        String frame = "CONNECT\n" + "login: system\n" + "passcode:
>> manager\n\n" + Stomp.NULL;
>>        stompConnection.sendFrame(frame);
>>
>>        frame = stompConnection.receiveFrame();
>>        assertTrue(frame.startsWith("CONNECTED"));
>>
>>        frame = "SUBSCRIBE\n" + "destination:/temp-queue/" +
>> getQueueName()
>> + "\n" + "ack:auto\n\n" + Stomp.NULL;
>>        stompConnection.sendFrame(frame);
>>
>>        frame = "SEND\n" + "destination:/temp-queue/" + getQueueName() +
>> "\n\n" + "Hello World" + Stomp.NULL;
>>        stompConnection.sendFrame(frame);
>>
>>        StompFrame message = stompConnection.receive(1000);
>>        assertEquals("Hello World", message.getBody());
>>    }
>>
>> Can you try using one connection in your client code for starters and see
>> if
>> it works.
>>
>> If you cannot make your stomp implementation to work with temp
>> destinations,
>> you can use regular queues and selectors as described in this thread
>>
>> http://www.nabble.com/Implement-request-response-with-JMS-over-Stomp-td24914033.html
>>
>> Cheers
>> --
>> Dejan Bosanac
>>
>> Open Source Integration - http://fusesource.com/
>> ActiveMQ in Action - http://www.manning.com/snyder/
>> Blog - http://www.nighttale.net
>>
>>
>> On Tue, Sep 8, 2009 at 5:22 AM, nmittal <nm...@rblt.com> wrote:
>>
>> >
>> > Dejan, Thanks for your reply. I have been trying that... I am trying
>> with
>> 2
>> > stomp connections, one that subscribes to '/temp-queue/tq' and one that
>> > sends a message to /queue/Queue.Data with reply to as the above
>> temp-queue.
>> > my client code is below..
>> >
>> > my $stomp = Net::Stomp->new( { hostname => "192.168.42.30", port =>
>> '61613'
>> > } );
>> > $stomp->connect();
>> >
>> > my $stomp1 = Net::Stomp->new( { hostname => "192.168.42.30", port =>
>> > '61613'
>> > } );
>> > $stomp1->connect();
>> > $stomp1->subscribe(
>> >      {   destination             => '/temp-queue/tq',
>> >          'ack'                   => 'auto',
>> >          'activemq.prefetchSize' => 1,
>> >      }
>> >  );
>> >
>> > my %head;
>> > $head{destination} = '/queue/Queue.Data';
>> > $head{"reply-to"} = '/temp-queue/tq';
>> >
>> > my $frame = Net::Stomp::Frame->new(
>> >       { command => "SEND", headers => \%head, body =>
>> to_json(\%request)
>> }
>> > );
>> >
>> > $stomp->send_frame($frame);
>> >
>> > while (1) {
>> >    my $frame1 = $stomp1->receive_frame;
>> >    my $json1 = $frame1->body;
>> >
>> >    print "$json1\n";
>> > }
>> >
>> > --------
>> >
>> > on the server, I subscribe to /queue/Queue.Data and send the reply back
>> on
>> > the destination that is in the reply-to header. please see server code
>> > below...
>> >
>> > my $stomp = Net::Stomp->new( { hostname => $broker, port => '61613' }
>> );
>> > $stomp->connect();
>> > $stomp->subscribe(
>> >      {   destination             => '/queue/Queue.Data',
>> >          'ack'                   => 'client',
>> >          'activemq.prefetchSize' => 1,
>> >      }
>> >  );
>> >
>> >
>> > while (1) {
>> >    my $frame = $stomp->receive_frame;
>> >
>> >    if (defined($frame->headers->{"reply-to"})) {
>> >                my %head;
>> >                $head{destination} = $frame->headers->{"reply-to"};
>> >
>> >                my $frame1= Net::Stomp::Frame->new(
>> >               { command => "SEND", headers => \%head, body => "This is
>> the
>> > response from server" } );
>> >
>> >                $stomp->send_frame($frame1);
>> >    }
>> >
>> >    $stomp->ack( { frame => $frame } );
>> > }
>> > $stomp->disconnect;
>> >
>> > --
>> >
>> > I see that the request is being sent and received but the reply never
>> makes
>> > it to the client. What am I doing wrong?
>> >
>> > thanks
>> > Nishant
>> >
>> >
>> >
>> >
>> > Dejan Bosanac wrote:
>> > >
>> > > Hi,
>> > >
>> > > use /temp-topic/ or /temp-queue/ prefixes (instead of /topic/ and
>> > /queue/)
>> > > for destination names and ActiveMQ will create temporary
>> destinations.
>> > >
>> > > Cheers
>> > > --
>> > > Dejan Bosanac
>> > >
>> > > Open Source Integration - http://fusesource.com/
>> > > ActiveMQ in Action - http://www.manning.com/snyder/
>> > > Blog - http://www.nighttale.net
>> > >
>> > >
>> > > On Mon, Sep 7, 2009 at 3:45 AM, nmittal <nm...@rblt.com> wrote:
>> > >
>> > >>
>> > >> Hi, I am trying to implement request response with a Perl Client
>> using
>> > >> stomp.
>> > >> the documentation on the ActiveMQ website has sample code in JAVA
>> that
>> > >> created a temporary destination and then sets the replyto header to
>> this
>> > >> temp destination.
>> > >> How can I create a temporary destination in Perl STOMP client. I am
>> > using
>> > >> Net::Stomp.
>> > >>
>> > >> thanks for the help.
>> > >>
>> > >> Nishant
>> > >> --
>> > >> View this message in context:
>> > >>
>> >
>> http://www.nabble.com/PERL-STOMP%3A-How-to-Request-Response-tp25323954p25323954.html
>> > >> Sent from the ActiveMQ - User mailing list archive at Nabble.com.
>> > >>
>> > >>
>> > >
>> > >
>> > > -----
>> > > Dejan Bosanac
>> > >
>> > > Open Source Integration - http://fusesource.com/
>> > > ActiveMQ in Action - http://www.manning.com/snyder/
>> > > Blog - http://www.nighttale.net
>> > >
>> >
>> > --
>> > View this message in context:
>> >
>> http://www.nabble.com/PERL-STOMP%3A-How-to-Request-Response-tp25323954p25339442.html
>> > Sent from the ActiveMQ - User mailing list archive at Nabble.com.
>> >
>> >
>>
> 
> 

-- 
View this message in context: http://www.nabble.com/PERL-STOMP%3A-How-to-Request-Response-tp25323954p25351243.html
Sent from the ActiveMQ - User mailing list archive at Nabble.com.


Re: PERL/STOMP: How to Request Response

Posted by James Casey <ja...@gmail.com>.
Hmm, to answer my own question....

You need to do the following (in python, using stomp.py):

    dest = '/temp-queue/my-temp-queue'
    conn.start()
    conn.connect()

    conn.subscribe(destination=dest, ack='auto', headers={'persistent' :
'true'})
    conn.send('test', destination=dest)

By sending a message to the temp queue you've subscribed to, you'll  get
back a message which has the actual destination, not the one you sent to.
e.g. dumping all message returned you'd see:

connecting : vtb-generic-51:61613
CONNECTED
session: ID:vtb-generic-51.cern.ch-58055-1255502987724-4:13


MESSAGE
priority: 0
destination:
/remote-temp-queue/ID:vtb-generic-51.cern.ch-58055-1255502987724-4:13:1
message-id: ID:vtb-generic-51.cern.ch-58055-1255502987724-4:13:-1:1:1
expires: 0
timestamp: 1255506767594

test


It's a bit of a hack but will work until we can fix the protocol.

Hope this helps,

James.

--


2009/10/14 James Casey <ja...@gmail.com>

> Hi Dejan,
>
> I've been looking in this area and think I see the problem.
>
> When I create a consumer on a temp queue using STOMP, e.g.
> /temp-queue/my-queue the broker creates an internal queue called, e.g.
> /remote-temp-queue/ID:vtb-generic-51.cern.ch-58055-1255502987724-4:1:1
>
> If I go and look via JMX I can find out what this temp queue is.
>
> If I have a producer (separate process) that tries to send to
> /temp-queue/my-queue nothing happens (I guess it creates another internal
> queue in the broker) while if I send a message from the producer to
> /remote-temp-queue/ID:vtb-generic-51.cern.ch-58055-1255502987724-4:1:1 the
> message arrives fine at the consumer.
>
> The problem is that my consumer doesn't know what the name of the actual
> underlying queue is so it can't send it as a reply-to header.  How could
> this be worked around in the STOMP protocol ?
>
> James.
>
> 2009/9/8 Dejan Bosanac <de...@nighttale.net>
>
> Hi Roger,
>>
>> I agree with you. I'm not sure if that's the problem, it was just my first
>> guess looking at the code. Will take a look at it more closely and see if
>> there's a problem on a broker side.
>>
>> Cheers
>> --
>> Dejan Bosanac
>>
>> Open Source Integration - http://fusesource.com/
>> ActiveMQ in Action - http://www.manning.com/snyder/
>> Blog - http://www.nighttale.net
>>
>>
>> On Tue, Sep 8, 2009 at 6:40 PM, Roger Hoover <ro...@gmail.com>
>> wrote:
>>
>> > Hi Dejan,
>> >
>> > I'm not seeing how this feature is useful if you have to have a single
>> > connection.  Usually, the whole point of request/response, is to have
>> the
>> > request processed elsewhere by some other process (perhaps on another
>> > machine) with it's own connection.  If it only works on the same
>> > connection,
>> > I don't see the point of using a queue to distribute the work.
>> >
>> > Please let me know if I'm missing something.  Thanks,
>> >
>> > Roger
>> >
>> > On Tue, Sep 8, 2009 at 6:54 AM, Dejan Bosanac <de...@nighttale.net>
>> wrote:
>> >
>> > > Hi Nishant,
>> > >
>> > > just committed a test case that shows that stomp works nice with temp
>> > > destinations
>> > >
>> > > here it is
>> > >
>> > >    public void testTempDestination() throws Exception {
>> > >
>> > >        String frame = "CONNECT\n" + "login: system\n" + "passcode:
>> > > manager\n\n" + Stomp.NULL;
>> > >        stompConnection.sendFrame(frame);
>> > >
>> > >        frame = stompConnection.receiveFrame();
>> > >        assertTrue(frame.startsWith("CONNECTED"));
>> > >
>> > >        frame = "SUBSCRIBE\n" + "destination:/temp-queue/" +
>> > getQueueName()
>> > > + "\n" + "ack:auto\n\n" + Stomp.NULL;
>> > >        stompConnection.sendFrame(frame);
>> > >
>> > >        frame = "SEND\n" + "destination:/temp-queue/" + getQueueName()
>> +
>> > > "\n\n" + "Hello World" + Stomp.NULL;
>> > >        stompConnection.sendFrame(frame);
>> > >
>> > >        StompFrame message = stompConnection.receive(1000);
>> > >        assertEquals("Hello World", message.getBody());
>> > >    }
>> > >
>> > > Can you try using one connection in your client code for starters and
>> see
>> > > if
>> > > it works.
>> > >
>> > > If you cannot make your stomp implementation to work with temp
>> > > destinations,
>> > > you can use regular queues and selectors as described in this thread
>> > >
>> > >
>> >
>> http://www.nabble.com/Implement-request-response-with-JMS-over-Stomp-td24914033.html
>> > >
>> > > Cheers
>> > > --
>> > > Dejan Bosanac
>> > >
>> > > Open Source Integration - http://fusesource.com/
>> > > ActiveMQ in Action - http://www.manning.com/snyder/
>> > > Blog - http://www.nighttale.net
>> > >
>> > >
>> > > On Tue, Sep 8, 2009 at 5:22 AM, nmittal <nm...@rblt.com> wrote:
>> > >
>> > > >
>> > > > Dejan, Thanks for your reply. I have been trying that... I am trying
>> > with
>> > > 2
>> > > > stomp connections, one that subscribes to '/temp-queue/tq' and one
>> that
>> > > > sends a message to /queue/Queue.Data with reply to as the above
>> > > temp-queue.
>> > > > my client code is below..
>> > > >
>> > > > my $stomp = Net::Stomp->new( { hostname => "192.168.42.30", port =>
>> > > '61613'
>> > > > } );
>> > > > $stomp->connect();
>> > > >
>> > > > my $stomp1 = Net::Stomp->new( { hostname => "192.168.42.30", port =>
>> > > > '61613'
>> > > > } );
>> > > > $stomp1->connect();
>> > > > $stomp1->subscribe(
>> > > >      {   destination             => '/temp-queue/tq',
>> > > >          'ack'                   => 'auto',
>> > > >          'activemq.prefetchSize' => 1,
>> > > >      }
>> > > >  );
>> > > >
>> > > > my %head;
>> > > > $head{destination} = '/queue/Queue.Data';
>> > > > $head{"reply-to"} = '/temp-queue/tq';
>> > > >
>> > > > my $frame = Net::Stomp::Frame->new(
>> > > >       { command => "SEND", headers => \%head, body =>
>> > to_json(\%request)
>> > > }
>> > > > );
>> > > >
>> > > > $stomp->send_frame($frame);
>> > > >
>> > > > while (1) {
>> > > >    my $frame1 = $stomp1->receive_frame;
>> > > >    my $json1 = $frame1->body;
>> > > >
>> > > >    print "$json1\n";
>> > > > }
>> > > >
>> > > > --------
>> > > >
>> > > > on the server, I subscribe to /queue/Queue.Data and send the reply
>> back
>> > > on
>> > > > the destination that is in the reply-to header. please see server
>> code
>> > > > below...
>> > > >
>> > > > my $stomp = Net::Stomp->new( { hostname => $broker, port => '61613'
>> }
>> > );
>> > > > $stomp->connect();
>> > > > $stomp->subscribe(
>> > > >      {   destination             => '/queue/Queue.Data',
>> > > >          'ack'                   => 'client',
>> > > >          'activemq.prefetchSize' => 1,
>> > > >      }
>> > > >  );
>> > > >
>> > > >
>> > > > while (1) {
>> > > >    my $frame = $stomp->receive_frame;
>> > > >
>> > > >    if (defined($frame->headers->{"reply-to"})) {
>> > > >                my %head;
>> > > >                $head{destination} = $frame->headers->{"reply-to"};
>> > > >
>> > > >                my $frame1= Net::Stomp::Frame->new(
>> > > >               { command => "SEND", headers => \%head, body => "This
>> is
>> > > the
>> > > > response from server" } );
>> > > >
>> > > >                $stomp->send_frame($frame1);
>> > > >    }
>> > > >
>> > > >    $stomp->ack( { frame => $frame } );
>> > > > }
>> > > > $stomp->disconnect;
>> > > >
>> > > > --
>> > > >
>> > > > I see that the request is being sent and received but the reply
>> never
>> > > makes
>> > > > it to the client. What am I doing wrong?
>> > > >
>> > > > thanks
>> > > > Nishant
>> > > >
>> > > >
>> > > >
>> > > >
>> > > > Dejan Bosanac wrote:
>> > > > >
>> > > > > Hi,
>> > > > >
>> > > > > use /temp-topic/ or /temp-queue/ prefixes (instead of /topic/ and
>> > > > /queue/)
>> > > > > for destination names and ActiveMQ will create temporary
>> > destinations.
>> > > > >
>> > > > > Cheers
>> > > > > --
>> > > > > Dejan Bosanac
>> > > > >
>> > > > > Open Source Integration - http://fusesource.com/
>> > > > > ActiveMQ in Action - http://www.manning.com/snyder/
>> > > > > Blog - http://www.nighttale.net
>> > > > >
>> > > > >
>> > > > > On Mon, Sep 7, 2009 at 3:45 AM, nmittal <nm...@rblt.com> wrote:
>> > > > >
>> > > > >>
>> > > > >> Hi, I am trying to implement request response with a Perl Client
>> > using
>> > > > >> stomp.
>> > > > >> the documentation on the ActiveMQ website has sample code in JAVA
>> > that
>> > > > >> created a temporary destination and then sets the replyto header
>> to
>> > > this
>> > > > >> temp destination.
>> > > > >> How can I create a temporary destination in Perl STOMP client. I
>> am
>> > > > using
>> > > > >> Net::Stomp.
>> > > > >>
>> > > > >> thanks for the help.
>> > > > >>
>> > > > >> Nishant
>> > > > >> --
>> > > > >> View this message in context:
>> > > > >>
>> > > >
>> > >
>> >
>> http://www.nabble.com/PERL-STOMP%3A-How-to-Request-Response-tp25323954p25323954.html
>> > > > >> Sent from the ActiveMQ - User mailing list archive at Nabble.com.
>> > > > >>
>> > > > >>
>> > > > >
>> > > > >
>> > > > > -----
>> > > > > Dejan Bosanac
>> > > > >
>> > > > > Open Source Integration - http://fusesource.com/
>> > > > > ActiveMQ in Action - http://www.manning.com/snyder/
>> > > > > Blog - http://www.nighttale.net
>> > > > >
>> > > >
>> > > > --
>> > > > View this message in context:
>> > > >
>> > >
>> >
>> http://www.nabble.com/PERL-STOMP%3A-How-to-Request-Response-tp25323954p25339442.html
>> > > > Sent from the ActiveMQ - User mailing list archive at Nabble.com.
>> > > >
>> > > >
>> > >
>> >
>>
>
>

Re: PERL/STOMP: How to Request Response

Posted by James Casey <ja...@gmail.com>.
Hi Dejan,

I've been looking in this area and think I see the problem.

When I create a consumer on a temp queue using STOMP, e.g.
/temp-queue/my-queue the broker creates an internal queue called, e.g.
/remote-temp-queue/ID:vtb-generic-51.cern.ch-58055-1255502987724-4:1:1

If I go and look via JMX I can find out what this temp queue is.

If I have a producer (separate process) that tries to send to
/temp-queue/my-queue nothing happens (I guess it creates another internal
queue in the broker) while if I send a message from the producer to
/remote-temp-queue/ID:vtb-generic-51.cern.ch-58055-1255502987724-4:1:1 the
message arrives fine at the consumer.

The problem is that my consumer doesn't know what the name of the actual
underlying queue is so it can't send it as a reply-to header.  How could
this be worked around in the STOMP protocol ?

James.

2009/9/8 Dejan Bosanac <de...@nighttale.net>

> Hi Roger,
>
> I agree with you. I'm not sure if that's the problem, it was just my first
> guess looking at the code. Will take a look at it more closely and see if
> there's a problem on a broker side.
>
> Cheers
> --
> Dejan Bosanac
>
> Open Source Integration - http://fusesource.com/
> ActiveMQ in Action - http://www.manning.com/snyder/
> Blog - http://www.nighttale.net
>
>
> On Tue, Sep 8, 2009 at 6:40 PM, Roger Hoover <ro...@gmail.com>
> wrote:
>
> > Hi Dejan,
> >
> > I'm not seeing how this feature is useful if you have to have a single
> > connection.  Usually, the whole point of request/response, is to have the
> > request processed elsewhere by some other process (perhaps on another
> > machine) with it's own connection.  If it only works on the same
> > connection,
> > I don't see the point of using a queue to distribute the work.
> >
> > Please let me know if I'm missing something.  Thanks,
> >
> > Roger
> >
> > On Tue, Sep 8, 2009 at 6:54 AM, Dejan Bosanac <de...@nighttale.net>
> wrote:
> >
> > > Hi Nishant,
> > >
> > > just committed a test case that shows that stomp works nice with temp
> > > destinations
> > >
> > > here it is
> > >
> > >    public void testTempDestination() throws Exception {
> > >
> > >        String frame = "CONNECT\n" + "login: system\n" + "passcode:
> > > manager\n\n" + Stomp.NULL;
> > >        stompConnection.sendFrame(frame);
> > >
> > >        frame = stompConnection.receiveFrame();
> > >        assertTrue(frame.startsWith("CONNECTED"));
> > >
> > >        frame = "SUBSCRIBE\n" + "destination:/temp-queue/" +
> > getQueueName()
> > > + "\n" + "ack:auto\n\n" + Stomp.NULL;
> > >        stompConnection.sendFrame(frame);
> > >
> > >        frame = "SEND\n" + "destination:/temp-queue/" + getQueueName() +
> > > "\n\n" + "Hello World" + Stomp.NULL;
> > >        stompConnection.sendFrame(frame);
> > >
> > >        StompFrame message = stompConnection.receive(1000);
> > >        assertEquals("Hello World", message.getBody());
> > >    }
> > >
> > > Can you try using one connection in your client code for starters and
> see
> > > if
> > > it works.
> > >
> > > If you cannot make your stomp implementation to work with temp
> > > destinations,
> > > you can use regular queues and selectors as described in this thread
> > >
> > >
> >
> http://www.nabble.com/Implement-request-response-with-JMS-over-Stomp-td24914033.html
> > >
> > > Cheers
> > > --
> > > Dejan Bosanac
> > >
> > > Open Source Integration - http://fusesource.com/
> > > ActiveMQ in Action - http://www.manning.com/snyder/
> > > Blog - http://www.nighttale.net
> > >
> > >
> > > On Tue, Sep 8, 2009 at 5:22 AM, nmittal <nm...@rblt.com> wrote:
> > >
> > > >
> > > > Dejan, Thanks for your reply. I have been trying that... I am trying
> > with
> > > 2
> > > > stomp connections, one that subscribes to '/temp-queue/tq' and one
> that
> > > > sends a message to /queue/Queue.Data with reply to as the above
> > > temp-queue.
> > > > my client code is below..
> > > >
> > > > my $stomp = Net::Stomp->new( { hostname => "192.168.42.30", port =>
> > > '61613'
> > > > } );
> > > > $stomp->connect();
> > > >
> > > > my $stomp1 = Net::Stomp->new( { hostname => "192.168.42.30", port =>
> > > > '61613'
> > > > } );
> > > > $stomp1->connect();
> > > > $stomp1->subscribe(
> > > >      {   destination             => '/temp-queue/tq',
> > > >          'ack'                   => 'auto',
> > > >          'activemq.prefetchSize' => 1,
> > > >      }
> > > >  );
> > > >
> > > > my %head;
> > > > $head{destination} = '/queue/Queue.Data';
> > > > $head{"reply-to"} = '/temp-queue/tq';
> > > >
> > > > my $frame = Net::Stomp::Frame->new(
> > > >       { command => "SEND", headers => \%head, body =>
> > to_json(\%request)
> > > }
> > > > );
> > > >
> > > > $stomp->send_frame($frame);
> > > >
> > > > while (1) {
> > > >    my $frame1 = $stomp1->receive_frame;
> > > >    my $json1 = $frame1->body;
> > > >
> > > >    print "$json1\n";
> > > > }
> > > >
> > > > --------
> > > >
> > > > on the server, I subscribe to /queue/Queue.Data and send the reply
> back
> > > on
> > > > the destination that is in the reply-to header. please see server
> code
> > > > below...
> > > >
> > > > my $stomp = Net::Stomp->new( { hostname => $broker, port => '61613' }
> > );
> > > > $stomp->connect();
> > > > $stomp->subscribe(
> > > >      {   destination             => '/queue/Queue.Data',
> > > >          'ack'                   => 'client',
> > > >          'activemq.prefetchSize' => 1,
> > > >      }
> > > >  );
> > > >
> > > >
> > > > while (1) {
> > > >    my $frame = $stomp->receive_frame;
> > > >
> > > >    if (defined($frame->headers->{"reply-to"})) {
> > > >                my %head;
> > > >                $head{destination} = $frame->headers->{"reply-to"};
> > > >
> > > >                my $frame1= Net::Stomp::Frame->new(
> > > >               { command => "SEND", headers => \%head, body => "This
> is
> > > the
> > > > response from server" } );
> > > >
> > > >                $stomp->send_frame($frame1);
> > > >    }
> > > >
> > > >    $stomp->ack( { frame => $frame } );
> > > > }
> > > > $stomp->disconnect;
> > > >
> > > > --
> > > >
> > > > I see that the request is being sent and received but the reply never
> > > makes
> > > > it to the client. What am I doing wrong?
> > > >
> > > > thanks
> > > > Nishant
> > > >
> > > >
> > > >
> > > >
> > > > Dejan Bosanac wrote:
> > > > >
> > > > > Hi,
> > > > >
> > > > > use /temp-topic/ or /temp-queue/ prefixes (instead of /topic/ and
> > > > /queue/)
> > > > > for destination names and ActiveMQ will create temporary
> > destinations.
> > > > >
> > > > > Cheers
> > > > > --
> > > > > Dejan Bosanac
> > > > >
> > > > > Open Source Integration - http://fusesource.com/
> > > > > ActiveMQ in Action - http://www.manning.com/snyder/
> > > > > Blog - http://www.nighttale.net
> > > > >
> > > > >
> > > > > On Mon, Sep 7, 2009 at 3:45 AM, nmittal <nm...@rblt.com> wrote:
> > > > >
> > > > >>
> > > > >> Hi, I am trying to implement request response with a Perl Client
> > using
> > > > >> stomp.
> > > > >> the documentation on the ActiveMQ website has sample code in JAVA
> > that
> > > > >> created a temporary destination and then sets the replyto header
> to
> > > this
> > > > >> temp destination.
> > > > >> How can I create a temporary destination in Perl STOMP client. I
> am
> > > > using
> > > > >> Net::Stomp.
> > > > >>
> > > > >> thanks for the help.
> > > > >>
> > > > >> Nishant
> > > > >> --
> > > > >> View this message in context:
> > > > >>
> > > >
> > >
> >
> http://www.nabble.com/PERL-STOMP%3A-How-to-Request-Response-tp25323954p25323954.html
> > > > >> Sent from the ActiveMQ - User mailing list archive at Nabble.com.
> > > > >>
> > > > >>
> > > > >
> > > > >
> > > > > -----
> > > > > Dejan Bosanac
> > > > >
> > > > > Open Source Integration - http://fusesource.com/
> > > > > ActiveMQ in Action - http://www.manning.com/snyder/
> > > > > Blog - http://www.nighttale.net
> > > > >
> > > >
> > > > --
> > > > View this message in context:
> > > >
> > >
> >
> http://www.nabble.com/PERL-STOMP%3A-How-to-Request-Response-tp25323954p25339442.html
> > > > Sent from the ActiveMQ - User mailing list archive at Nabble.com.
> > > >
> > > >
> > >
> >
>

Re: PERL/STOMP: How to Request Response

Posted by Dejan Bosanac <de...@nighttale.net>.
Hi Roger,

I agree with you. I'm not sure if that's the problem, it was just my first
guess looking at the code. Will take a look at it more closely and see if
there's a problem on a broker side.

Cheers
--
Dejan Bosanac

Open Source Integration - http://fusesource.com/
ActiveMQ in Action - http://www.manning.com/snyder/
Blog - http://www.nighttale.net


On Tue, Sep 8, 2009 at 6:40 PM, Roger Hoover <ro...@gmail.com> wrote:

> Hi Dejan,
>
> I'm not seeing how this feature is useful if you have to have a single
> connection.  Usually, the whole point of request/response, is to have the
> request processed elsewhere by some other process (perhaps on another
> machine) with it's own connection.  If it only works on the same
> connection,
> I don't see the point of using a queue to distribute the work.
>
> Please let me know if I'm missing something.  Thanks,
>
> Roger
>
> On Tue, Sep 8, 2009 at 6:54 AM, Dejan Bosanac <de...@nighttale.net> wrote:
>
> > Hi Nishant,
> >
> > just committed a test case that shows that stomp works nice with temp
> > destinations
> >
> > here it is
> >
> >    public void testTempDestination() throws Exception {
> >
> >        String frame = "CONNECT\n" + "login: system\n" + "passcode:
> > manager\n\n" + Stomp.NULL;
> >        stompConnection.sendFrame(frame);
> >
> >        frame = stompConnection.receiveFrame();
> >        assertTrue(frame.startsWith("CONNECTED"));
> >
> >        frame = "SUBSCRIBE\n" + "destination:/temp-queue/" +
> getQueueName()
> > + "\n" + "ack:auto\n\n" + Stomp.NULL;
> >        stompConnection.sendFrame(frame);
> >
> >        frame = "SEND\n" + "destination:/temp-queue/" + getQueueName() +
> > "\n\n" + "Hello World" + Stomp.NULL;
> >        stompConnection.sendFrame(frame);
> >
> >        StompFrame message = stompConnection.receive(1000);
> >        assertEquals("Hello World", message.getBody());
> >    }
> >
> > Can you try using one connection in your client code for starters and see
> > if
> > it works.
> >
> > If you cannot make your stomp implementation to work with temp
> > destinations,
> > you can use regular queues and selectors as described in this thread
> >
> >
> http://www.nabble.com/Implement-request-response-with-JMS-over-Stomp-td24914033.html
> >
> > Cheers
> > --
> > Dejan Bosanac
> >
> > Open Source Integration - http://fusesource.com/
> > ActiveMQ in Action - http://www.manning.com/snyder/
> > Blog - http://www.nighttale.net
> >
> >
> > On Tue, Sep 8, 2009 at 5:22 AM, nmittal <nm...@rblt.com> wrote:
> >
> > >
> > > Dejan, Thanks for your reply. I have been trying that... I am trying
> with
> > 2
> > > stomp connections, one that subscribes to '/temp-queue/tq' and one that
> > > sends a message to /queue/Queue.Data with reply to as the above
> > temp-queue.
> > > my client code is below..
> > >
> > > my $stomp = Net::Stomp->new( { hostname => "192.168.42.30", port =>
> > '61613'
> > > } );
> > > $stomp->connect();
> > >
> > > my $stomp1 = Net::Stomp->new( { hostname => "192.168.42.30", port =>
> > > '61613'
> > > } );
> > > $stomp1->connect();
> > > $stomp1->subscribe(
> > >      {   destination             => '/temp-queue/tq',
> > >          'ack'                   => 'auto',
> > >          'activemq.prefetchSize' => 1,
> > >      }
> > >  );
> > >
> > > my %head;
> > > $head{destination} = '/queue/Queue.Data';
> > > $head{"reply-to"} = '/temp-queue/tq';
> > >
> > > my $frame = Net::Stomp::Frame->new(
> > >       { command => "SEND", headers => \%head, body =>
> to_json(\%request)
> > }
> > > );
> > >
> > > $stomp->send_frame($frame);
> > >
> > > while (1) {
> > >    my $frame1 = $stomp1->receive_frame;
> > >    my $json1 = $frame1->body;
> > >
> > >    print "$json1\n";
> > > }
> > >
> > > --------
> > >
> > > on the server, I subscribe to /queue/Queue.Data and send the reply back
> > on
> > > the destination that is in the reply-to header. please see server code
> > > below...
> > >
> > > my $stomp = Net::Stomp->new( { hostname => $broker, port => '61613' }
> );
> > > $stomp->connect();
> > > $stomp->subscribe(
> > >      {   destination             => '/queue/Queue.Data',
> > >          'ack'                   => 'client',
> > >          'activemq.prefetchSize' => 1,
> > >      }
> > >  );
> > >
> > >
> > > while (1) {
> > >    my $frame = $stomp->receive_frame;
> > >
> > >    if (defined($frame->headers->{"reply-to"})) {
> > >                my %head;
> > >                $head{destination} = $frame->headers->{"reply-to"};
> > >
> > >                my $frame1= Net::Stomp::Frame->new(
> > >               { command => "SEND", headers => \%head, body => "This is
> > the
> > > response from server" } );
> > >
> > >                $stomp->send_frame($frame1);
> > >    }
> > >
> > >    $stomp->ack( { frame => $frame } );
> > > }
> > > $stomp->disconnect;
> > >
> > > --
> > >
> > > I see that the request is being sent and received but the reply never
> > makes
> > > it to the client. What am I doing wrong?
> > >
> > > thanks
> > > Nishant
> > >
> > >
> > >
> > >
> > > Dejan Bosanac wrote:
> > > >
> > > > Hi,
> > > >
> > > > use /temp-topic/ or /temp-queue/ prefixes (instead of /topic/ and
> > > /queue/)
> > > > for destination names and ActiveMQ will create temporary
> destinations.
> > > >
> > > > Cheers
> > > > --
> > > > Dejan Bosanac
> > > >
> > > > Open Source Integration - http://fusesource.com/
> > > > ActiveMQ in Action - http://www.manning.com/snyder/
> > > > Blog - http://www.nighttale.net
> > > >
> > > >
> > > > On Mon, Sep 7, 2009 at 3:45 AM, nmittal <nm...@rblt.com> wrote:
> > > >
> > > >>
> > > >> Hi, I am trying to implement request response with a Perl Client
> using
> > > >> stomp.
> > > >> the documentation on the ActiveMQ website has sample code in JAVA
> that
> > > >> created a temporary destination and then sets the replyto header to
> > this
> > > >> temp destination.
> > > >> How can I create a temporary destination in Perl STOMP client. I am
> > > using
> > > >> Net::Stomp.
> > > >>
> > > >> thanks for the help.
> > > >>
> > > >> Nishant
> > > >> --
> > > >> View this message in context:
> > > >>
> > >
> >
> http://www.nabble.com/PERL-STOMP%3A-How-to-Request-Response-tp25323954p25323954.html
> > > >> Sent from the ActiveMQ - User mailing list archive at Nabble.com.
> > > >>
> > > >>
> > > >
> > > >
> > > > -----
> > > > Dejan Bosanac
> > > >
> > > > Open Source Integration - http://fusesource.com/
> > > > ActiveMQ in Action - http://www.manning.com/snyder/
> > > > Blog - http://www.nighttale.net
> > > >
> > >
> > > --
> > > View this message in context:
> > >
> >
> http://www.nabble.com/PERL-STOMP%3A-How-to-Request-Response-tp25323954p25339442.html
> > > Sent from the ActiveMQ - User mailing list archive at Nabble.com.
> > >
> > >
> >
>

Re: PERL/STOMP: How to Request Response

Posted by Roger Hoover <ro...@gmail.com>.
Hi Dejan,

I'm not seeing how this feature is useful if you have to have a single
connection.  Usually, the whole point of request/response, is to have the
request processed elsewhere by some other process (perhaps on another
machine) with it's own connection.  If it only works on the same connection,
I don't see the point of using a queue to distribute the work.

Please let me know if I'm missing something.  Thanks,

Roger

On Tue, Sep 8, 2009 at 6:54 AM, Dejan Bosanac <de...@nighttale.net> wrote:

> Hi Nishant,
>
> just committed a test case that shows that stomp works nice with temp
> destinations
>
> here it is
>
>    public void testTempDestination() throws Exception {
>
>        String frame = "CONNECT\n" + "login: system\n" + "passcode:
> manager\n\n" + Stomp.NULL;
>        stompConnection.sendFrame(frame);
>
>        frame = stompConnection.receiveFrame();
>        assertTrue(frame.startsWith("CONNECTED"));
>
>        frame = "SUBSCRIBE\n" + "destination:/temp-queue/" + getQueueName()
> + "\n" + "ack:auto\n\n" + Stomp.NULL;
>        stompConnection.sendFrame(frame);
>
>        frame = "SEND\n" + "destination:/temp-queue/" + getQueueName() +
> "\n\n" + "Hello World" + Stomp.NULL;
>        stompConnection.sendFrame(frame);
>
>        StompFrame message = stompConnection.receive(1000);
>        assertEquals("Hello World", message.getBody());
>    }
>
> Can you try using one connection in your client code for starters and see
> if
> it works.
>
> If you cannot make your stomp implementation to work with temp
> destinations,
> you can use regular queues and selectors as described in this thread
>
> http://www.nabble.com/Implement-request-response-with-JMS-over-Stomp-td24914033.html
>
> Cheers
> --
> Dejan Bosanac
>
> Open Source Integration - http://fusesource.com/
> ActiveMQ in Action - http://www.manning.com/snyder/
> Blog - http://www.nighttale.net
>
>
> On Tue, Sep 8, 2009 at 5:22 AM, nmittal <nm...@rblt.com> wrote:
>
> >
> > Dejan, Thanks for your reply. I have been trying that... I am trying with
> 2
> > stomp connections, one that subscribes to '/temp-queue/tq' and one that
> > sends a message to /queue/Queue.Data with reply to as the above
> temp-queue.
> > my client code is below..
> >
> > my $stomp = Net::Stomp->new( { hostname => "192.168.42.30", port =>
> '61613'
> > } );
> > $stomp->connect();
> >
> > my $stomp1 = Net::Stomp->new( { hostname => "192.168.42.30", port =>
> > '61613'
> > } );
> > $stomp1->connect();
> > $stomp1->subscribe(
> >      {   destination             => '/temp-queue/tq',
> >          'ack'                   => 'auto',
> >          'activemq.prefetchSize' => 1,
> >      }
> >  );
> >
> > my %head;
> > $head{destination} = '/queue/Queue.Data';
> > $head{"reply-to"} = '/temp-queue/tq';
> >
> > my $frame = Net::Stomp::Frame->new(
> >       { command => "SEND", headers => \%head, body => to_json(\%request)
> }
> > );
> >
> > $stomp->send_frame($frame);
> >
> > while (1) {
> >    my $frame1 = $stomp1->receive_frame;
> >    my $json1 = $frame1->body;
> >
> >    print "$json1\n";
> > }
> >
> > --------
> >
> > on the server, I subscribe to /queue/Queue.Data and send the reply back
> on
> > the destination that is in the reply-to header. please see server code
> > below...
> >
> > my $stomp = Net::Stomp->new( { hostname => $broker, port => '61613' } );
> > $stomp->connect();
> > $stomp->subscribe(
> >      {   destination             => '/queue/Queue.Data',
> >          'ack'                   => 'client',
> >          'activemq.prefetchSize' => 1,
> >      }
> >  );
> >
> >
> > while (1) {
> >    my $frame = $stomp->receive_frame;
> >
> >    if (defined($frame->headers->{"reply-to"})) {
> >                my %head;
> >                $head{destination} = $frame->headers->{"reply-to"};
> >
> >                my $frame1= Net::Stomp::Frame->new(
> >               { command => "SEND", headers => \%head, body => "This is
> the
> > response from server" } );
> >
> >                $stomp->send_frame($frame1);
> >    }
> >
> >    $stomp->ack( { frame => $frame } );
> > }
> > $stomp->disconnect;
> >
> > --
> >
> > I see that the request is being sent and received but the reply never
> makes
> > it to the client. What am I doing wrong?
> >
> > thanks
> > Nishant
> >
> >
> >
> >
> > Dejan Bosanac wrote:
> > >
> > > Hi,
> > >
> > > use /temp-topic/ or /temp-queue/ prefixes (instead of /topic/ and
> > /queue/)
> > > for destination names and ActiveMQ will create temporary destinations.
> > >
> > > Cheers
> > > --
> > > Dejan Bosanac
> > >
> > > Open Source Integration - http://fusesource.com/
> > > ActiveMQ in Action - http://www.manning.com/snyder/
> > > Blog - http://www.nighttale.net
> > >
> > >
> > > On Mon, Sep 7, 2009 at 3:45 AM, nmittal <nm...@rblt.com> wrote:
> > >
> > >>
> > >> Hi, I am trying to implement request response with a Perl Client using
> > >> stomp.
> > >> the documentation on the ActiveMQ website has sample code in JAVA that
> > >> created a temporary destination and then sets the replyto header to
> this
> > >> temp destination.
> > >> How can I create a temporary destination in Perl STOMP client. I am
> > using
> > >> Net::Stomp.
> > >>
> > >> thanks for the help.
> > >>
> > >> Nishant
> > >> --
> > >> View this message in context:
> > >>
> >
> http://www.nabble.com/PERL-STOMP%3A-How-to-Request-Response-tp25323954p25323954.html
> > >> Sent from the ActiveMQ - User mailing list archive at Nabble.com.
> > >>
> > >>
> > >
> > >
> > > -----
> > > Dejan Bosanac
> > >
> > > Open Source Integration - http://fusesource.com/
> > > ActiveMQ in Action - http://www.manning.com/snyder/
> > > Blog - http://www.nighttale.net
> > >
> >
> > --
> > View this message in context:
> >
> http://www.nabble.com/PERL-STOMP%3A-How-to-Request-Response-tp25323954p25339442.html
> > Sent from the ActiveMQ - User mailing list archive at Nabble.com.
> >
> >
>

Re: PERL/STOMP: How to Request Response

Posted by nmittal <nm...@rblt.com>.
Dejan, you are right. It started working as soon as I used one connection.
thanks for your help.

NIshant


Dejan Bosanac wrote:
> 
> Hi Nishant,
> 
> just committed a test case that shows that stomp works nice with temp
> destinations
> 
> here it is
> 
>     public void testTempDestination() throws Exception {
> 
>         String frame = "CONNECT\n" + "login: system\n" + "passcode:
> manager\n\n" + Stomp.NULL;
>         stompConnection.sendFrame(frame);
> 
>         frame = stompConnection.receiveFrame();
>         assertTrue(frame.startsWith("CONNECTED"));
> 
>         frame = "SUBSCRIBE\n" + "destination:/temp-queue/" +
> getQueueName()
> + "\n" + "ack:auto\n\n" + Stomp.NULL;
>         stompConnection.sendFrame(frame);
> 
>         frame = "SEND\n" + "destination:/temp-queue/" + getQueueName() +
> "\n\n" + "Hello World" + Stomp.NULL;
>         stompConnection.sendFrame(frame);
> 
>         StompFrame message = stompConnection.receive(1000);
>         assertEquals("Hello World", message.getBody());
>     }
> 
> Can you try using one connection in your client code for starters and see
> if
> it works.
> 
> If you cannot make your stomp implementation to work with temp
> destinations,
> you can use regular queues and selectors as described in this thread
> http://www.nabble.com/Implement-request-response-with-JMS-over-Stomp-td24914033.html
> 
> Cheers
> --
> Dejan Bosanac
> 
> Open Source Integration - http://fusesource.com/
> ActiveMQ in Action - http://www.manning.com/snyder/
> Blog - http://www.nighttale.net
> 
> 
> On Tue, Sep 8, 2009 at 5:22 AM, nmittal <nm...@rblt.com> wrote:
> 
>>
>> Dejan, Thanks for your reply. I have been trying that... I am trying with
>> 2
>> stomp connections, one that subscribes to '/temp-queue/tq' and one that
>> sends a message to /queue/Queue.Data with reply to as the above
>> temp-queue.
>> my client code is below..
>>
>> my $stomp = Net::Stomp->new( { hostname => "192.168.42.30", port =>
>> '61613'
>> } );
>> $stomp->connect();
>>
>> my $stomp1 = Net::Stomp->new( { hostname => "192.168.42.30", port =>
>> '61613'
>> } );
>> $stomp1->connect();
>> $stomp1->subscribe(
>>      {   destination             => '/temp-queue/tq',
>>          'ack'                   => 'auto',
>>          'activemq.prefetchSize' => 1,
>>      }
>>  );
>>
>> my %head;
>> $head{destination} = '/queue/Queue.Data';
>> $head{"reply-to"} = '/temp-queue/tq';
>>
>> my $frame = Net::Stomp::Frame->new(
>>       { command => "SEND", headers => \%head, body => to_json(\%request)
>> }
>> );
>>
>> $stomp->send_frame($frame);
>>
>> while (1) {
>>    my $frame1 = $stomp1->receive_frame;
>>    my $json1 = $frame1->body;
>>
>>    print "$json1\n";
>> }
>>
>> --------
>>
>> on the server, I subscribe to /queue/Queue.Data and send the reply back
>> on
>> the destination that is in the reply-to header. please see server code
>> below...
>>
>> my $stomp = Net::Stomp->new( { hostname => $broker, port => '61613' } );
>> $stomp->connect();
>> $stomp->subscribe(
>>      {   destination             => '/queue/Queue.Data',
>>          'ack'                   => 'client',
>>          'activemq.prefetchSize' => 1,
>>      }
>>  );
>>
>>
>> while (1) {
>>    my $frame = $stomp->receive_frame;
>>
>>    if (defined($frame->headers->{"reply-to"})) {
>>                my %head;
>>                $head{destination} = $frame->headers->{"reply-to"};
>>
>>                my $frame1= Net::Stomp::Frame->new(
>>               { command => "SEND", headers => \%head, body => "This is
>> the
>> response from server" } );
>>
>>                $stomp->send_frame($frame1);
>>    }
>>
>>    $stomp->ack( { frame => $frame } );
>> }
>> $stomp->disconnect;
>>
>> --
>>
>> I see that the request is being sent and received but the reply never
>> makes
>> it to the client. What am I doing wrong?
>>
>> thanks
>> Nishant
>>
>>
>>
>>
>> Dejan Bosanac wrote:
>> >
>> > Hi,
>> >
>> > use /temp-topic/ or /temp-queue/ prefixes (instead of /topic/ and
>> /queue/)
>> > for destination names and ActiveMQ will create temporary destinations.
>> >
>> > Cheers
>> > --
>> > Dejan Bosanac
>> >
>> > Open Source Integration - http://fusesource.com/
>> > ActiveMQ in Action - http://www.manning.com/snyder/
>> > Blog - http://www.nighttale.net
>> >
>> >
>> > On Mon, Sep 7, 2009 at 3:45 AM, nmittal <nm...@rblt.com> wrote:
>> >
>> >>
>> >> Hi, I am trying to implement request response with a Perl Client using
>> >> stomp.
>> >> the documentation on the ActiveMQ website has sample code in JAVA that
>> >> created a temporary destination and then sets the replyto header to
>> this
>> >> temp destination.
>> >> How can I create a temporary destination in Perl STOMP client. I am
>> using
>> >> Net::Stomp.
>> >>
>> >> thanks for the help.
>> >>
>> >> Nishant
>> >> --
>> >> View this message in context:
>> >>
>> http://www.nabble.com/PERL-STOMP%3A-How-to-Request-Response-tp25323954p25323954.html
>> >> Sent from the ActiveMQ - User mailing list archive at Nabble.com.
>> >>
>> >>
>> >
>> >
>> > -----
>> > Dejan Bosanac
>> >
>> > Open Source Integration - http://fusesource.com/
>> > ActiveMQ in Action - http://www.manning.com/snyder/
>> > Blog - http://www.nighttale.net
>> >
>>
>> --
>> View this message in context:
>> http://www.nabble.com/PERL-STOMP%3A-How-to-Request-Response-tp25323954p25339442.html
>> Sent from the ActiveMQ - User mailing list archive at Nabble.com.
>>
>>
> 
> 
> -----
> Dejan Bosanac
> 
> Open Source Integration - http://fusesource.com/
> ActiveMQ in Action - http://www.manning.com/snyder/
> Blog - http://www.nighttale.net
> 

-- 
View this message in context: http://www.nabble.com/PERL-STOMP%3A-How-to-Request-Response-tp25323954p25347139.html
Sent from the ActiveMQ - User mailing list archive at Nabble.com.


Re: PERL/STOMP: How to Request Response

Posted by Dejan Bosanac <de...@nighttale.net>.
Hi Nishant,

just committed a test case that shows that stomp works nice with temp
destinations

here it is

    public void testTempDestination() throws Exception {

        String frame = "CONNECT\n" + "login: system\n" + "passcode:
manager\n\n" + Stomp.NULL;
        stompConnection.sendFrame(frame);

        frame = stompConnection.receiveFrame();
        assertTrue(frame.startsWith("CONNECTED"));

        frame = "SUBSCRIBE\n" + "destination:/temp-queue/" + getQueueName()
+ "\n" + "ack:auto\n\n" + Stomp.NULL;
        stompConnection.sendFrame(frame);

        frame = "SEND\n" + "destination:/temp-queue/" + getQueueName() +
"\n\n" + "Hello World" + Stomp.NULL;
        stompConnection.sendFrame(frame);

        StompFrame message = stompConnection.receive(1000);
        assertEquals("Hello World", message.getBody());
    }

Can you try using one connection in your client code for starters and see if
it works.

If you cannot make your stomp implementation to work with temp destinations,
you can use regular queues and selectors as described in this thread
http://www.nabble.com/Implement-request-response-with-JMS-over-Stomp-td24914033.html

Cheers
--
Dejan Bosanac

Open Source Integration - http://fusesource.com/
ActiveMQ in Action - http://www.manning.com/snyder/
Blog - http://www.nighttale.net


On Tue, Sep 8, 2009 at 5:22 AM, nmittal <nm...@rblt.com> wrote:

>
> Dejan, Thanks for your reply. I have been trying that... I am trying with 2
> stomp connections, one that subscribes to '/temp-queue/tq' and one that
> sends a message to /queue/Queue.Data with reply to as the above temp-queue.
> my client code is below..
>
> my $stomp = Net::Stomp->new( { hostname => "192.168.42.30", port => '61613'
> } );
> $stomp->connect();
>
> my $stomp1 = Net::Stomp->new( { hostname => "192.168.42.30", port =>
> '61613'
> } );
> $stomp1->connect();
> $stomp1->subscribe(
>      {   destination             => '/temp-queue/tq',
>          'ack'                   => 'auto',
>          'activemq.prefetchSize' => 1,
>      }
>  );
>
> my %head;
> $head{destination} = '/queue/Queue.Data';
> $head{"reply-to"} = '/temp-queue/tq';
>
> my $frame = Net::Stomp::Frame->new(
>       { command => "SEND", headers => \%head, body => to_json(\%request) }
> );
>
> $stomp->send_frame($frame);
>
> while (1) {
>    my $frame1 = $stomp1->receive_frame;
>    my $json1 = $frame1->body;
>
>    print "$json1\n";
> }
>
> --------
>
> on the server, I subscribe to /queue/Queue.Data and send the reply back on
> the destination that is in the reply-to header. please see server code
> below...
>
> my $stomp = Net::Stomp->new( { hostname => $broker, port => '61613' } );
> $stomp->connect();
> $stomp->subscribe(
>      {   destination             => '/queue/Queue.Data',
>          'ack'                   => 'client',
>          'activemq.prefetchSize' => 1,
>      }
>  );
>
>
> while (1) {
>    my $frame = $stomp->receive_frame;
>
>    if (defined($frame->headers->{"reply-to"})) {
>                my %head;
>                $head{destination} = $frame->headers->{"reply-to"};
>
>                my $frame1= Net::Stomp::Frame->new(
>               { command => "SEND", headers => \%head, body => "This is the
> response from server" } );
>
>                $stomp->send_frame($frame1);
>    }
>
>    $stomp->ack( { frame => $frame } );
> }
> $stomp->disconnect;
>
> --
>
> I see that the request is being sent and received but the reply never makes
> it to the client. What am I doing wrong?
>
> thanks
> Nishant
>
>
>
>
> Dejan Bosanac wrote:
> >
> > Hi,
> >
> > use /temp-topic/ or /temp-queue/ prefixes (instead of /topic/ and
> /queue/)
> > for destination names and ActiveMQ will create temporary destinations.
> >
> > Cheers
> > --
> > Dejan Bosanac
> >
> > Open Source Integration - http://fusesource.com/
> > ActiveMQ in Action - http://www.manning.com/snyder/
> > Blog - http://www.nighttale.net
> >
> >
> > On Mon, Sep 7, 2009 at 3:45 AM, nmittal <nm...@rblt.com> wrote:
> >
> >>
> >> Hi, I am trying to implement request response with a Perl Client using
> >> stomp.
> >> the documentation on the ActiveMQ website has sample code in JAVA that
> >> created a temporary destination and then sets the replyto header to this
> >> temp destination.
> >> How can I create a temporary destination in Perl STOMP client. I am
> using
> >> Net::Stomp.
> >>
> >> thanks for the help.
> >>
> >> Nishant
> >> --
> >> View this message in context:
> >>
> http://www.nabble.com/PERL-STOMP%3A-How-to-Request-Response-tp25323954p25323954.html
> >> Sent from the ActiveMQ - User mailing list archive at Nabble.com.
> >>
> >>
> >
> >
> > -----
> > Dejan Bosanac
> >
> > Open Source Integration - http://fusesource.com/
> > ActiveMQ in Action - http://www.manning.com/snyder/
> > Blog - http://www.nighttale.net
> >
>
> --
> View this message in context:
> http://www.nabble.com/PERL-STOMP%3A-How-to-Request-Response-tp25323954p25339442.html
> Sent from the ActiveMQ - User mailing list archive at Nabble.com.
>
>

Re: PERL/STOMP: How to Request Response

Posted by nmittal <nm...@rblt.com>.
Dejan, Thanks for your reply. I have been trying that... I am trying with 2
stomp connections, one that subscribes to '/temp-queue/tq' and one that
sends a message to /queue/Queue.Data with reply to as the above temp-queue.
my client code is below..

my $stomp = Net::Stomp->new( { hostname => "192.168.42.30", port => '61613'
} );
$stomp->connect();

my $stomp1 = Net::Stomp->new( { hostname => "192.168.42.30", port => '61613'
} );
$stomp1->connect();
$stomp1->subscribe(
      {   destination             => '/temp-queue/tq',
          'ack'                   => 'auto',
          'activemq.prefetchSize' => 1,
      }
  );

my %head;
$head{destination} = '/queue/Queue.Data';
$head{"reply-to"} = '/temp-queue/tq';
	
my $frame = Net::Stomp::Frame->new(
       { command => "SEND", headers => \%head, body => to_json(\%request) }
);
	
$stomp->send_frame($frame);

while (1) {
    my $frame1 = $stomp1->receive_frame;
    my $json1 = $frame1->body;
    
    print "$json1\n";
}

--------

on the server, I subscribe to /queue/Queue.Data and send the reply back on
the destination that is in the reply-to header. please see server code
below...

my $stomp = Net::Stomp->new( { hostname => $broker, port => '61613' } );
$stomp->connect();
$stomp->subscribe(
      {   destination             => '/queue/Queue.Data',
          'ack'                   => 'client',
          'activemq.prefetchSize' => 1,
      }
  );


while (1) {
    my $frame = $stomp->receive_frame;

    if (defined($frame->headers->{"reply-to"})) {
		my %head;
		$head{destination} = $frame->headers->{"reply-to"};

		my $frame1= Net::Stomp::Frame->new(
	       { command => "SEND", headers => \%head, body => "This is the
response from server" } );

		$stomp->send_frame($frame1);
    }

    $stomp->ack( { frame => $frame } );
}
$stomp->disconnect;

--

I see that the request is being sent and received but the reply never makes
it to the client. What am I doing wrong?

thanks
Nishant




Dejan Bosanac wrote:
> 
> Hi,
> 
> use /temp-topic/ or /temp-queue/ prefixes (instead of /topic/ and /queue/)
> for destination names and ActiveMQ will create temporary destinations.
> 
> Cheers
> --
> Dejan Bosanac
> 
> Open Source Integration - http://fusesource.com/
> ActiveMQ in Action - http://www.manning.com/snyder/
> Blog - http://www.nighttale.net
> 
> 
> On Mon, Sep 7, 2009 at 3:45 AM, nmittal <nm...@rblt.com> wrote:
> 
>>
>> Hi, I am trying to implement request response with a Perl Client using
>> stomp.
>> the documentation on the ActiveMQ website has sample code in JAVA that
>> created a temporary destination and then sets the replyto header to this
>> temp destination.
>> How can I create a temporary destination in Perl STOMP client. I am using
>> Net::Stomp.
>>
>> thanks for the help.
>>
>> Nishant
>> --
>> View this message in context:
>> http://www.nabble.com/PERL-STOMP%3A-How-to-Request-Response-tp25323954p25323954.html
>> Sent from the ActiveMQ - User mailing list archive at Nabble.com.
>>
>>
> 
> 
> -----
> Dejan Bosanac
> 
> Open Source Integration - http://fusesource.com/
> ActiveMQ in Action - http://www.manning.com/snyder/
> Blog - http://www.nighttale.net
> 

-- 
View this message in context: http://www.nabble.com/PERL-STOMP%3A-How-to-Request-Response-tp25323954p25339442.html
Sent from the ActiveMQ - User mailing list archive at Nabble.com.


Re: PERL/STOMP: How to Request Response

Posted by Dejan Bosanac <de...@nighttale.net>.
Hi,

use /temp-topic/ or /temp-queue/ prefixes (instead of /topic/ and /queue/)
for destination names and ActiveMQ will create temporary destinations.

Cheers
--
Dejan Bosanac

Open Source Integration - http://fusesource.com/
ActiveMQ in Action - http://www.manning.com/snyder/
Blog - http://www.nighttale.net


On Mon, Sep 7, 2009 at 3:45 AM, nmittal <nm...@rblt.com> wrote:

>
> Hi, I am trying to implement request response with a Perl Client using
> stomp.
> the documentation on the ActiveMQ website has sample code in JAVA that
> created a temporary destination and then sets the replyto header to this
> temp destination.
> How can I create a temporary destination in Perl STOMP client. I am using
> Net::Stomp.
>
> thanks for the help.
>
> Nishant
> --
> View this message in context:
> http://www.nabble.com/PERL-STOMP%3A-How-to-Request-Response-tp25323954p25323954.html
> Sent from the ActiveMQ - User mailing list archive at Nabble.com.
>
>