I have discussed in the entry below how I patched the Perl Net::Stomp module to exchange Bytes Message. Visit the link below for details. http://www.nabble.com/Stomp-in-Perl%3A-Net%3A%3AStomp-tf2478545.html#a6943843
I'm now running ActiveMQ 4.0.1 and still have a problem with Java JMS Bytes Message to Perl Stomp client. Is ActiveMQ 4.1 fixes this Stomp server problem? -Sileshi Hiram Chirino wrote: > > On 10/20/06, sileshi <[EMAIL PROTECTED]> wrote: >> >> >> I have achieved Perl Stomp and Java JMS clients exchanging Text Messages >> via >> ActiveMQ. That is wonderful! > > > > great! > > > Where I have run into a problem is in the reas of sending message that >> involves >> JMS BytesMessage from Java JMS client to destination a Perl Stomp client >> consumes. I have discovered the AMQ Stomp server doesn't seem to write to >> the >> socket in this case. > > > He had a little bug in our code that was recently fixed. If you build > activemq 4.0.x-SNAPSHOT or 4.1-SNAPSHOT from source it should be able to > send message to the stomp client. > > I have debugged this through the Net::Stomp receive_frame() method where > the >> socket is ready for read, but we read zero bytes everytime. Note that, >> this >> happens >> only with JMS BytesMessage. JMS Text Message can be exchanged between >> perl >> and >> java clients with no problem. > > > > yep. > > > I have eliminated the fact this is not socket problem with binary data, by >> sending >> binary data between Perl clients. Note that Stomp being text protocl, >> thus >> does not >> take into consideration that fact that the content or body of message >> could >> be >> non-text data. Therefore, if you send perl-to-perl binary data(in body >> only), the socket >> read stops too soon, due to Net::Stomp receive_frame() thinks it is end >> of >> frame >> when runs into null byte. > > > > yep. For stomp to send binary data that has embeded nulls, you have to > set > a > content-length header. > > This indicates to me, that the following changes may be required: >> >> 1. Stomp Protocl >> a. Add either new header or extended header for message body encoding >> content-encoding: base64, text, etc... >> content-length: length of message body in bytes > > > yep. we chose content-length > > 2. ActiveMQ support >> ActiveMQ Broker need to add conetnt encoding and length when passing >> message to Stomp Server. This is true when Stomp Server passes it to >> broker > > > > Yep.. when ActiveMQ sees STOMP message with content-length it assumes it's > a > BytesMessage and when it gets a BytesMessage it sets the content-length > header on the stomp frame. > > 3. Stomp protocol implementation >> Need to change the way incoming socket data is read >> based on content-length and content-encoding. > > > Some stomp clients allready support this. I have recently submitted a > patch > for perl Net::Stomp client so that it supports this too. If you want to > apply the patch yourself, please see: > > http://issues.apache.org/activemq/browse/AMQ-978 > > > You may ask, why do I need to send binary message body? >> I'm trying to build RPC over the JMS Message Broker using a binary >> protocol on top of Stomp. Thus, RPC call has to be >> marshalled, let's say using BER, and will be envolped in Stomp and >> sent via Mesage Broker to a Java server. > > > sounds great! > > > Any thought will be welcomed... > > > We were thinking along the same lines.. It's just a matter of waiting for > all the fixes to get release. > > > -Sileshi >> -- >> View this message in context: >> http://www.nabble.com/AMQ-Missing-JMS-Bytes-Message-on-stomp-tf2483639.html#a6925742 >> Sent from the ActiveMQ - User mailing list archive at Nabble.com. >> >> > > > -- > Regards, > Hiram > > Blog: http://hiramchirino.com > > -- View this message in context: http://www.nabble.com/AMQ-Missing-JMS-Bytes-Message-on-stomp-tf2483639.html#a6944144 Sent from the ActiveMQ - User mailing list archive at Nabble.com.
