Can't send message to queue via producer
javahamburg Aug 10, 2012 5:14 AMHi,
I'm trying since two days sending a message via the hornetq core api, but I can't get it to work. I read the documentation and searched the web a lot, so I think this is the place where I can get finally help now. I extracted the relevant logic in the demo program below.
The problem: I send a ClientMessage via the producer, and it seems that everything is fine. No Exception is thrown or anything. But when trying to take a look into the queue with JMSBrowser, the program has massiv problems displaying the message. Also a self written program can't really get every information. The good point is, the messages seem to have arrived at the server/queue, but the "Message ID" as well as the body are empty!
Please suggest what is wrong with the program below, I can't see it, and the documentation doesn't helps either, thanks a lot.
import java.util.HashMap; import java.util.Map; import org.hornetq.api.core.TransportConfiguration; import org.hornetq.api.core.client.ClientMessage; import org.hornetq.api.core.client.ClientProducer; import org.hornetq.api.core.client.ClientSession; import org.hornetq.api.core.client.ClientSessionFactory; import org.hornetq.api.core.client.HornetQClient; import org.hornetq.api.core.client.ServerLocator; import org.hornetq.core.remoting.impl.netty.NettyConnectorFactory; import org.hornetq.core.remoting.impl.netty.TransportConstants; public class Demo { public static void main(String[] args) throws Exception { Map<String, Object> map = new HashMap<>(); map.put(TransportConstants.HOST_PROP_NAME, "localhost"); map.put(TransportConstants.PORT_PROP_NAME, 5445); TransportConfiguration config = new TransportConfiguration(NettyConnectorFactory.class.getName(), map); ServerLocator locator = HornetQClient.createServerLocatorWithoutHA(config); ClientSessionFactory factory = locator.createSessionFactory(); //ClientSessionFactory factory = locator.createSessionFactory(config); // config already in locator, but using this doesn't works either ClientSession session = factory.createSession("username", "password", false, true, true, false, 100); // switching the flags does not help // session.start(); // only required for consumers per JavaDoc, but behaviour don't changes if uncommented. ClientProducer producer = session.createProducer("jms.queue.demo"); ClientMessage cm = session.createMessage(true); cm.putObjectProperty("hello_world", "testproperty"); cm.getBodyBuffer().writeString("message should have a text body"); // body is still null /* I also tried this, but this creates a "java.lang.OutOfMemoryError: Java heap space" when trying to consume if (StringUtils.isNotBlank(msg.getBody())) { ByteArrayInputStream bais = new ByteArrayInputStream(msg.getBody().getBytes(JmsCliCharsets.UTF8)); cm.setBodyInputStream(bais); }*/ producer.send(cm); // session.commit(); // doesn't helps either session.close(); factory.close(); locator.close(); } }