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
[email protected]
-----Original Message-----
From: Rob Godfrey [mailto:[email protected]]
Sent: Friday 2013.10.11 18:11
To: [email protected]
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,
(String)
((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,
Rob
On 11 October 2013 23:21, Branden Smith <[email protected]> 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,
> Session.AUTO_ACKNOWLEDGE);
> 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
> [email protected]
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]