qpid-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Branden Smith <BSm...@liaison.com>
Subject RE: AMQP-JMS client: messages dequeued as AmqpMessageImpl instances?
Date Mon, 14 Oct 2013 22:35:16 GMT
Hi Rob,

Thanks for this reply as well; I restarted my broker, and now the messages are being received
as TextMessages.  It's a bit disconcerting, but I'll have to wait to address it when/if it
comes up again, since at the moment I can't reproduce.

I did have one additional problem wherein the broker is failing to delete messages after they
are received; I suspect this is also a HornetQ problem of some sort, but if you have a moment,
could you tell me how I could verify that Qpid is properly acknowledging the messages?  For
each of the received messages, I see logs like this:

FINE: SEND[(host)|0] : Disposition{role=receiver,first=2,last=2,settled=false,state=TransactionalState{txnId={oct},outcome=Accepted{}}}
FINE: RECV[(host)|0] : Disposition{role=sender,first=2,last=2,settled=true}

That looks like an acknowledgment to me, which seems to suggest that HornetQ should be removing
the messages from the queue, but I'm not familiar with the meaning of "settled", so I thought
I'd ask.

Thanks again.

Branden Smith

-----Original Message-----
From: Rob Godfrey [mailto:rob.j.godfrey@gmail.com] 
Sent: Friday 2013.10.11 18:11
To: users@qpid.apache.org
Subject: Re: AMQP-JMS client: messages dequeued as AmqpMessageImpl instances?

Hi Branden,

A message will be returned as an AmqpMessageImpl if the client can't work
out what sort of JMS Message it is supposed to represent.

The logic in the client for detecting a TextMessage is as follows:

else if(bodySection instanceof AmqpValue &&
((AmqpValue)bodySection).getValue() instanceof String)
                message = new TextMessageImpl(header, messageAnnotations,
properties, appProperties,
((AmqpValue)bodySection).getValue(), footer, _session);

That is the client is expecting a TextMessage to be represented in AMQP as
a message with an amqp-value section where the value is of type String.  It
seems as if HornetQ is not sending the messages in that form and thus the
client is not recognising the message as a TextMessage.

Hope this helps,

On 11 October 2013 23:21, Branden Smith <BSmith@liaison.com> wrote:

> I'm using the Qpid AMQP-JMS client to both publish and subscribe to the
> same queue (provided by HornetQ 2.4.0.beta1); I'm publishing a message as a
> javax.jms.TextMessage, but it is being received by the listener as a
> org.apache.qpid.amqp_1_0.jms.impl.AmqpMessageImpl.
> Publisher:
>     queueSession = queueCnxn.createQueueSession(false,
>     queueProducer = queueSession.createSender(eventQueue);
>     queueProducer.send(queueSession.createTextMessage("test message"));
> Consumer:
>     public class TestConsumer implements MessageListener {
>         @Override
>         public void onMessage(Message message) {
>                 final String logPrefix;
>                 TextMessage txtMsg;
>                 logPrefix = "[onMessage] ";
>                 log.debug(">>> " + logPrefix);
>                 try {
>                         message.acknowledge();
>                         log.debug("message acknowledged");
>                         log.debug("message type: " + message.getClass());
>                         //log.debug("body assignable to String??? " +
> message.isBodyAssignableTo(String.class));
>                 } catch (JMSException jmsExc) {
>                         // TODO
>                         log.error("ack-exception!", jmsExc);
>                 }
>       ...
> Output:
>     17:07:42.035 [Thread-4] DEBUG >>> [onMessage]
>     17:07:42.035 [Thread-4] DEBUG message acknowledged
>     17:07:42.035 [Thread-4] DEBUG message type: class
> org.apache.qpid.amqp_1_0.jms.impl.AmqpMessageImpl
> I'm not sure what to do with AmqpMessageImpl; it only inherits from
> MessageImpl, and only implements javax.jms.Message. Furthermore, if I
> attempt to call Message.isBodyAssignableTo(Class<T>), I get an
> AbstractMethodError. Trying to directly cast to TextMessage throws a
> ClassCastException.
> The examples all show the consumer receiving the usual types defined by
> the JMS API; any thoughts as to what I could be doing wrong?
> Thanks,
> Branden Smith
> bsmith@liaison.com
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@qpid.apache.org
> For additional commands, e-mail: users-help@qpid.apache.org

To unsubscribe, e-mail: users-unsubscribe@qpid.apache.org
For additional commands, e-mail: users-help@qpid.apache.org

View raw message