/** * Processes an InOnly exchange by converting the message in the exchange and * sending it to the configured endpoint destination. * * @param destination the destination to send the message to * @param msg the HzMq message to be sent * @param exchange the exchange to process * @param mqProducer the producer to use for sending * * @throws Exception if there is an error producing the message to the * exchange */ private void processInOnly(String destination, HazelcastMQMessage msg, Exchange exchange, HazelcastMQProducer mqProducer) throws Exception { int timeToLive = config.getTimeToLive(); mqProducer.send(destination, msg, timeToLive); }
mqProducer.setTimeToLive(3000); mqProducer.send(destination, "I only have a few seconds to live!");
mqProducer.setTimeToLive(timeToLive); mqProducer.send(jmsDest.getMqName(), mqMsg);
@Transactional public void processWithTransaction() { try (HazelcastMQContext mqContext = getContext(hazelcastMQInstance)) { HazelcastMQProducer producer = mqContext.createProducer( "/queue/demo.queue"); log.info("Sending to queue in transaction."); producer.send(getClass().getName() + ": processWithTransaction"); log.info("Sleeping."); sleep(5, TimeUnit.SECONDS); log.info("Done."); } }
public void processWithoutTransaction() { try (HazelcastMQContext mqContext = getContext(hazelcastMQInstance)) { HazelcastMQProducer producer = mqContext.createProducer( "/queue/demo.queue"); log.info("Sending to queue outside transaction."); producer.send(getClass().getName() + ": processWithoutTransaction"); log.info("Sleeping."); sleep(5, TimeUnit.SECONDS); log.info("Done."); } }
@Transactional public void processWithTransactionAndException() { try (HazelcastMQContext mqContext = getContext(hazelcastMQInstance)) { HazelcastMQProducer producer = mqContext.createProducer( "/queue/demo.queue"); log.info("Sending to queue in transaction."); producer.send(getClass().getName() + ": processWithTransactionAndException"); log.info("Sleeping."); sleep(5, TimeUnit.SECONDS); log.info("Throwing exception in transaction."); throw new RuntimeException("Better roll back."); } }
@Override public void onMessage(HazelcastMQMessage msg) { context.createProducer().send(msg.getDestination(), msg); }
private void sendAndReceiveOnSingleOtherNode(ClusterNode node1, ClusterNode node3) { HazelcastMQProducer mqProducer = node1.getMqContext().createProducer(); mqProducer.send(destination, "Hello " + msgCounter++); HazelcastMQConsumer mqConsumer = node3.getMqContext().createConsumer( destination); String msg = new String(mqConsumer.receiveBody(1, TimeUnit.SECONDS)); log.info("Got message on node 3: " + msg); mqConsumer.close(); }
private void sendAndReceiveOnMultipleNodes(ClusterNode node1, ClusterNode node2, ClusterNode node3) { HazelcastMQProducer mqProducer = node1.getMqContext().createProducer(); mqProducer.send(destination, "Hello " + msgCounter++); mqProducer.send(destination, "Hello " + msgCounter++); mqProducer.send(destination, "Hello " + msgCounter++); mqProducer.send(destination, "Hello " + msgCounter++); HazelcastMQConsumer mqConsumer = node2.getMqContext().createConsumer( destination); String msg = new String(mqConsumer.receiveBody(1, TimeUnit.SECONDS)); log.info("Got message on node 2: " + msg); mqConsumer.close(); mqConsumer = node1.getMqContext().createConsumer(destination); msg = new String(mqConsumer.receiveBody(1, TimeUnit.SECONDS)); log.info("Got message on node 1: " + msg); mqConsumer.close(); mqConsumer = node3.getMqContext().createConsumer(destination); msg = new String(mqConsumer.receiveBody(1, TimeUnit.SECONDS)); log.info("Got message on node 3: " + msg); mqConsumer.close(); mqConsumer = node2.getMqContext().createConsumer(destination); msg = new String(mqConsumer.receiveBody(1, TimeUnit.SECONDS)); log.info("Got message on node 2: " + msg); mqConsumer.close(); }
private void sendKillAndReceiveOnMultipleNodes(ClusterNode node1, ClusterNode node2, ClusterNode node3) { HazelcastMQProducer mqProducer = node1.getMqContext().createProducer(); mqProducer.send(destination, "Hello " + msgCounter++); mqProducer.send(destination, "Hello " + msgCounter++); // Kill the node. This doesn't prove too much because we don't know where // the original data landed in the cluster. There's a good chance the // "master" data isn't sitting on node1 anyway. node1.kill(); HazelcastMQConsumer mqConsumer = node2.getMqContext().createConsumer( destination); String msg = new String(mqConsumer.receiveBody(1, TimeUnit.SECONDS)); log.info("Got message on node 2: " + msg); mqConsumer.close(); mqConsumer = node3.getMqContext().createConsumer(destination); msg = new String(mqConsumer.receiveBody(1, TimeUnit.SECONDS)); log.info("Got message on node 3: " + msg); mqConsumer.close(); }
/** * Sends a reply message if the exchange has a valid message in the out or * in fields (in that order). * * @param correlationId the optional correlation ID to set on the out going * message * @param replyToDestination the reply to destination * @param camelExchange the exchange containing the message to send as the * reply */ private void sendReply(String correlationId, String replyToDestination, Exchange camelExchange) { Message camelMsg = camelExchange.hasOut() ? camelExchange.getOut() : camelExchange.getIn(); if (camelMsg != null) { try { HazelcastMQMessage msg = messageConverter.fromCamelMessage(camelMsg); msg.getHeaders().remove(org.mpilone.hazelcastmq.core.Headers.REPLY_TO); msg.setDestination(replyToDestination); msg.setCorrelationId(correlationId); mqContext.createProducer(replyToDestination).send(msg); } catch (Throwable ex) { camelExchange.setException(ex); } } } }
private void sendKillTwoRestartOneKillOneAndReceive(ClusterNode node1, ClusterNode node2, ClusterNode node3) throws InterruptedException { HazelcastMQProducer mqProducer = node1.getMqContext().createProducer(); mqProducer.send(destination, "Hello " + msgCounter++); mqProducer.send(destination, "Hello " + msgCounter++); // Kill the first two nodes. Again, this may not prove too much because we // don't know where the original data landed in the cluster. There's a // chance the "master" data isn't sitting on node1 or node2 anyway. node1.kill(); node2.kill(); HazelcastMQConsumer mqConsumer = node3.getMqContext().createConsumer( destination); String msg = new String(mqConsumer.receiveBody(1, TimeUnit.SECONDS)); log.info("Got message on node 3: " + msg); mqConsumer.close(); // Now restart node 2 and give it some time to join the cluster and migrate // data. node2.restart(); Thread.sleep(10000); // Now kill node 3. In theory the remaining queued message should have // migrated to node 2. node3.kill(); mqConsumer = node2.getMqContext().createConsumer(destination); msg = new String(mqConsumer.receiveBody(1, TimeUnit.SECONDS)); log.info("Got message on node 2: " + msg); mqConsumer.close(); }
mqProducer.send(destination, msg, timeToLive);
@Override protected void doSend(StompletRequest req, StompletResponse res) throws Exception { Frame frame = req.getFrame(); // Get the destination header. String destName = getRequiredHeader( org.mpilone.yeti.Headers.DESTINATION, frame); // Get the optional transaction ID. String transactionId = frame.getHeaders().get( org.mpilone.yeti.Headers.TRANSACTION); // Use a transacted context if we have an ID. Otherwise use the default // context. if (transactionId == null) { transactionId = DEFAULT_CONTEXT_TXN_ID; } ClientTransaction tx = transactions.get(transactionId); if (tx == null) { throw new StompClientException(format("Transaction [%s] is not active.", transactionId), null, frame); } HazelcastMQContext context = tx.getContext(); // Create the producer. HazelcastMQProducer producer = context.createProducer(); // Convert and send the message. producer.send(destName, config.getFrameConverter().fromFrame(frame)); writeOptionalReceipt(frame, res.getFrameChannel()); }
private void sendKillTwoAndReceive(ClusterNode node1, ClusterNode node2, ClusterNode node3) { log.info("Sending messages on node 1"); HazelcastMQProducer mqProducer = node1.getMqContext().createProducer(); mqProducer.send(destination, "Hello " + msgCounter++); mqProducer.send(destination, "Hello " + msgCounter++); // Kill the first two nodes. Again, this may not prove too much because we // don't know where the original data landed in the cluster. There's a // chance the "master" data isn't sitting on node1 or node2 anyway. log.info("Killing node 1"); node1.kill(); log.info("Killing node 2"); node2.kill(); log.info("Attempting receive from node 3"); HazelcastMQConsumer mqConsumer = node3.getMqContext().createConsumer( destination); String msg = new String(mqConsumer.receiveBody(1, TimeUnit.SECONDS)); log.info("Got message on node 3: " + msg); mqConsumer.close(); mqConsumer = node3.getMqContext().createConsumer(destination); msg = new String(mqConsumer.receiveBody(1, TimeUnit.SECONDS)); log.info("Got message on node 3: " + msg); mqConsumer.close(); }
mqProducer.send("/queue/example.dest", msg);
mqProducer.send("/queue/example.dest", msg);
HazelcastMQMessage msg = new HazelcastMQMessage(); msg.setBody("Hello World " + i); mqProducer.send(destination, msg);