List of usage examples for javax.jms TextMessage acknowledge
void acknowledge() throws JMSException;
From source file:com.tremolosecurity.provisioning.core.ProvisioningEngineImpl.java
@Override public void onMessage(javax.jms.Message msg) { TextMessage fromq = (TextMessage) msg; try {/*from w ww . java 2 s.c o m*/ Gson gson = new Gson(); SmtpMessage email = gson.fromJson(fromq.getText(), SmtpMessage.class); this.sendEmail(email); fromq.acknowledge(); //session.commit(); } catch (MessagingException | JMSException e) { logger.error("Could not send email", e); ByteArrayOutputStream baos = new ByteArrayOutputStream(); PrintWriter baout = new PrintWriter(baos); e.printStackTrace(baout); baout.flush(); baout.close(); StringBuffer b = new StringBuffer(); b.append("Could not send email\n").append(new String(baos.toByteArray())); throw new RuntimeException(b.toString(), e); } }
From source file:org.apache.activemq.leveldb.test.ReplicatedLevelDBBrokerTest.java
@Test @Ignore//from ww w . jav a 2 s .c om public void testReplicationQuorumLoss() throws Throwable { System.out.println("======================================"); System.out.println(" Start 2 ActiveMQ nodes."); System.out.println("======================================"); startBrokerAsync(createBrokerNode("node-1", port)); startBrokerAsync(createBrokerNode("node-2", port)); BrokerService master = waitForNextMaster(); System.out.println("======================================"); System.out.println(" Start the producer and consumer"); System.out.println("======================================"); final AtomicBoolean stopClients = new AtomicBoolean(false); final ArrayBlockingQueue<String> errors = new ArrayBlockingQueue<String>(100); final AtomicLong receivedCounter = new AtomicLong(); final AtomicLong sentCounter = new AtomicLong(); Thread producer = startFailoverClient("producer", new Client() { @Override public void execute(Connection connection) throws Exception { Session session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE); MessageProducer producer = session.createProducer(session.createQueue("test")); long actual = 0; while (!stopClients.get()) { TextMessage msg = session.createTextMessage("Hello World"); msg.setLongProperty("id", actual++); producer.send(msg); sentCounter.incrementAndGet(); } } }); Thread consumer = startFailoverClient("consumer", new Client() { @Override public void execute(Connection connection) throws Exception { connection.start(); Session session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE); MessageConsumer consumer = session.createConsumer(session.createQueue("test")); long expected = 0; while (!stopClients.get()) { Message msg = consumer.receive(200); if (msg != null) { long actual = msg.getLongProperty("id"); if (actual != expected) { errors.offer("Received got unexpected msg id: " + actual + ", expected: " + expected); } msg.acknowledge(); expected = actual + 1; receivedCounter.incrementAndGet(); } } } }); try { assertCounterMakesProgress(sentCounter, 10, TimeUnit.SECONDS); assertCounterMakesProgress(receivedCounter, 5, TimeUnit.SECONDS); assertNull(errors.poll()); System.out.println("======================================"); System.out.println(" Master should stop once the quorum is lost."); System.out.println("======================================"); ArrayList<BrokerService> stopped = stopSlaves();// stopping the slaves should kill the quorum. assertStopsWithin(master, 10, TimeUnit.SECONDS); assertNull(errors.poll()); // clients should not see an error since they are failover clients. stopped.add(master); System.out.println("======================================"); System.out.println(" Restart the slave. Clients should make progress again.."); System.out.println("======================================"); startBrokersAsync(createBrokerNodes(stopped)); assertCounterMakesProgress(sentCounter, 10, TimeUnit.SECONDS); assertCounterMakesProgress(receivedCounter, 5, TimeUnit.SECONDS); assertNull(errors.poll()); } catch (Throwable e) { e.printStackTrace(); throw e; } finally { // Wait for the clients to stop.. stopClients.set(true); producer.join(); consumer.join(); } }
From source file:org.wso2.carbon.appfactory.eventing.jms.AFMessageListener.java
@Override public void onMessage(Message message) { if (log.isDebugEnabled()) { if (message instanceof MapMessage) { try { String messageBody = ((MapMessage) message).getString(TopicPublisher.MESSAGE_BODY); log.debug("Received a message:" + messageBody); } catch (JMSException e) { log.error("Error while getting message content.", e); }/*from w ww . j av a 2 s . c o m*/ } } MapMessage mapMessage; if (message instanceof MapMessage) { mapMessage = (MapMessage) message; MessageStore.getInstance().addMessage(this.subscriptionId, mapMessage); } else if (message instanceof TextMessage) { //Todo:remove this. we only support mapMessages initially and below code is only for testing purpose. final TextMessage textMessage = (TextMessage) message; mapMessage = new MapMessage() { @Override public boolean getBoolean(String s) throws JMSException { return false; //To change body of implemented methods use File | Settings | File Templates. } @Override public byte getByte(String s) throws JMSException { return 0; //To change body of implemented methods use File | Settings | File Templates. } @Override public short getShort(String s) throws JMSException { return 0; //To change body of implemented methods use File | Settings | File Templates. } @Override public char getChar(String s) throws JMSException { return 0; //To change body of implemented methods use File | Settings | File Templates. } @Override public int getInt(String s) throws JMSException { return 0; //To change body of implemented methods use File | Settings | File Templates. } @Override public long getLong(String s) throws JMSException { return 0; //To change body of implemented methods use File | Settings | File Templates. } @Override public float getFloat(String s) throws JMSException { return 0; //To change body of implemented methods use File | Settings | File Templates. } @Override public double getDouble(String s) throws JMSException { return 0; //To change body of implemented methods use File | Settings | File Templates. } @Override public String getString(String s) throws JMSException { return textMessage.getText(); } @Override public byte[] getBytes(String s) throws JMSException { return new byte[0]; //To change body of implemented methods use File | Settings | File Templates. } @Override public Object getObject(String s) throws JMSException { return null; //To change body of implemented methods use File | Settings | File Templates. } @Override public Enumeration getMapNames() throws JMSException { return null; //To change body of implemented methods use File | Settings | File Templates. } @Override public void setBoolean(String s, boolean b) throws JMSException { //To change body of implemented methods use File | Settings | File Templates. } @Override public void setByte(String s, byte b) throws JMSException { //To change body of implemented methods use File | Settings | File Templates. } @Override public void setShort(String s, short i) throws JMSException { //To change body of implemented methods use File | Settings | File Templates. } @Override public void setChar(String s, char c) throws JMSException { //To change body of implemented methods use File | Settings | File Templates. } @Override public void setInt(String s, int i) throws JMSException { //To change body of implemented methods use File | Settings | File Templates. } @Override public void setLong(String s, long l) throws JMSException { //To change body of implemented methods use File | Settings | File Templates. } @Override public void setFloat(String s, float v) throws JMSException { //To change body of implemented methods use File | Settings | File Templates. } @Override public void setDouble(String s, double v) throws JMSException { //To change body of implemented methods use File | Settings | File Templates. } @Override public void setString(String s, String s2) throws JMSException { //To change body of implemented methods use File | Settings | File Templates. } @Override public void setBytes(String s, byte[] bytes) throws JMSException { //To change body of implemented methods use File | Settings | File Templates. } @Override public void setBytes(String s, byte[] bytes, int i, int i2) throws JMSException { //To change body of implemented methods use File | Settings | File Templates. } @Override public void setObject(String s, Object o) throws JMSException { //To change body of implemented methods use File | Settings | File Templates. } @Override public boolean itemExists(String s) throws JMSException { return false; //To change body of implemented methods use File | Settings | File Templates. } @Override public String getJMSMessageID() throws JMSException { return textMessage.getJMSMessageID(); } @Override public void setJMSMessageID(String s) throws JMSException { //To change body of implemented methods use File | Settings | File Templates. } @Override public long getJMSTimestamp() throws JMSException { return textMessage.getJMSTimestamp(); } @Override public void setJMSTimestamp(long l) throws JMSException { //To change body of implemented methods use File | Settings | File Templates. } @Override public byte[] getJMSCorrelationIDAsBytes() throws JMSException { return new byte[0]; //To change body of implemented methods use File | Settings | File Templates. } @Override public void setJMSCorrelationIDAsBytes(byte[] bytes) throws JMSException { //To change body of implemented methods use File | Settings | File Templates. } @Override public void setJMSCorrelationID(String s) throws JMSException { //To change body of implemented methods use File | Settings | File Templates. } @Override public String getJMSCorrelationID() throws JMSException { return textMessage.getJMSCorrelationID(); } @Override public Destination getJMSReplyTo() throws JMSException { return null; //To change body of implemented methods use File | Settings | File Templates. } @Override public void setJMSReplyTo(Destination destination) throws JMSException { //To change body of implemented methods use File | Settings | File Templates. } @Override public Destination getJMSDestination() throws JMSException { return textMessage.getJMSDestination(); } @Override public void setJMSDestination(Destination destination) throws JMSException { //To change body of implemented methods use File | Settings | File Templates. } @Override public int getJMSDeliveryMode() throws JMSException { return textMessage.getJMSDeliveryMode(); } @Override public void setJMSDeliveryMode(int i) throws JMSException { //To change body of implemented methods use File | Settings | File Templates. } @Override public boolean getJMSRedelivered() throws JMSException { return textMessage.getJMSRedelivered(); } @Override public void setJMSRedelivered(boolean b) throws JMSException { //To change body of implemented methods use File | Settings | File Templates. } @Override public String getJMSType() throws JMSException { return textMessage.getJMSType(); } @Override public void setJMSType(String s) throws JMSException { //To change body of implemented methods use File | Settings | File Templates. } @Override public long getJMSExpiration() throws JMSException { return textMessage.getJMSExpiration(); } @Override public void setJMSExpiration(long l) throws JMSException { //To change body of implemented methods use File | Settings | File Templates. } @Override public int getJMSPriority() throws JMSException { return textMessage.getJMSPriority(); } @Override public void setJMSPriority(int i) throws JMSException { //To change body of implemented methods use File | Settings | File Templates. } @Override public void clearProperties() throws JMSException { textMessage.clearProperties(); } @Override public boolean propertyExists(String s) throws JMSException { return textMessage.propertyExists(s); } @Override public boolean getBooleanProperty(String s) throws JMSException { return false; //To change body of implemented methods use File | Settings | File Templates. } @Override public byte getByteProperty(String s) throws JMSException { return 0; //To change body of implemented methods use File | Settings | File Templates. } @Override public short getShortProperty(String s) throws JMSException { return 0; //To change body of implemented methods use File | Settings | File Templates. } @Override public int getIntProperty(String s) throws JMSException { return 0; //To change body of implemented methods use File | Settings | File Templates. } @Override public long getLongProperty(String s) throws JMSException { return 0; //To change body of implemented methods use File | Settings | File Templates. } @Override public float getFloatProperty(String s) throws JMSException { return 0; //To change body of implemented methods use File | Settings | File Templates. } @Override public double getDoubleProperty(String s) throws JMSException { return 0; //To change body of implemented methods use File | Settings | File Templates. } @Override public String getStringProperty(String s) throws JMSException { return null; //To change body of implemented methods use File | Settings | File Templates. } @Override public Object getObjectProperty(String s) throws JMSException { return null; //To change body of implemented methods use File | Settings | File Templates. } @Override public Enumeration getPropertyNames() throws JMSException { return null; //To change body of implemented methods use File | Settings | File Templates. } @Override public void setBooleanProperty(String s, boolean b) throws JMSException { //To change body of implemented methods use File | Settings | File Templates. } @Override public void setByteProperty(String s, byte b) throws JMSException { textMessage.setByteProperty(s, b); } @Override public void setShortProperty(String s, short i) throws JMSException { textMessage.setShortProperty(s, i); } @Override public void setIntProperty(String s, int i) throws JMSException { textMessage.setIntProperty(s, i); } @Override public void setLongProperty(String s, long l) throws JMSException { textMessage.setLongProperty(s, l); } @Override public void setFloatProperty(String s, float v) throws JMSException { textMessage.setFloatProperty(s, v); } @Override public void setDoubleProperty(String s, double v) throws JMSException { textMessage.setDoubleProperty(s, v); } @Override public void setStringProperty(String s, String s2) throws JMSException { textMessage.setStringProperty(s, s2); } @Override public void setObjectProperty(String s, Object o) throws JMSException { textMessage.setObjectProperty(s, o); } @Override public void acknowledge() throws JMSException { textMessage.acknowledge(); } @Override public void clearBody() throws JMSException { textMessage.clearBody(); } }; MessageStore.getInstance().addMessage(this.subscriptionId, mapMessage); } }
From source file:org.wso2.mb.integration.common.clients.operations.topic.TopicMessageListener.java
public void onMessage(Message message) { messageCount.incrementAndGet();// www. j av a 2 s .c o m localMessageCount++; TextMessage receivedMessage = (TextMessage) message; try { String redelivery = ""; if (message.getJMSRedelivered()) { redelivery = "REDELIVERED"; } else { redelivery = "ORIGINAL"; } if (messageCount.get() % printNumberOfMessagesPer == 0) { log.info("[TOPIC RECEIVE] ThreadID:" + Thread.currentThread().getId() + " topic:" + topicName + " " + "localMessageCount:" + localMessageCount + " totalMessageCount:" + messageCount.get() + " max" + " count:" + stopMessageCount); } if (isToPrintEachMessage) { log.info("(count:" + messageCount.get() + "/threadID:" + Thread.currentThread().getId() + "/topic:" + topicName + ") " + redelivery + " >> " + receivedMessage.getText()); AndesClientUtils.writeToFile(receivedMessage.getText(), fileToWriteReceivedMessages); } if (messageCount.get() % ackAfterEach == 0) { if (topicSession.getAcknowledgeMode() == QueueSession.CLIENT_ACKNOWLEDGE) { receivedMessage.acknowledge(); } } //commit get priority if (messageCount.get() % commitPerMessageCount == 0) { topicSession.commit(); log.info("Committed Topic Session"); } else if (messageCount.get() % rollbackPerMessagecount == 0) { topicSession.rollback(); log.info("Rollbacked Topic Session"); } if (messageCount.get() >= unsubscribeMessageCount) { unsubscribeConsumer(); AndesClientUtils.sleepForInterval(200); } else if (messageCount.get() >= stopMessageCount) { stopMessageListener(); AndesClientUtils.sleepForInterval(200); } if (delayBetweenMessages != 0) { try { Thread.sleep(delayBetweenMessages); } catch (InterruptedException e) { //silently ignore } } } catch (NumberFormatException e) { log.error("Wrong inputs.", e); } catch (JMSException e) { log.error("JMS Exception", e); } }
From source file:org.wso2.mb.integration.tests.amqp.functional.RedeliveryDelayTestCase.java
/** * This test publishes 10 messages and the subscriber rejects the first message and then wait for the redelivered * message.// w w w .j a v a2 s . com * <p/> * The redelivered message is tested against the same message content with the original message and the timestamps * are also checked against the original message timestamp to make sure that the message was delayed. * Here message receive method is used instead of the message listener to receive messages. * * @throws AndesClientConfigurationException * @throws XPathExpressionException * @throws IOException * @throws JMSException * @throws AndesClientException * @throws NamingException */ @Test(groups = { "wso2.mb", "queue" }) public void firstMessageInvalidOnlyQueueMessageReceiverTestCase() throws AndesClientConfigurationException, XPathExpressionException, IOException, JMSException, AndesClientException, NamingException { long sendCount = 10; final List<ImmutablePair<String, Calendar>> receivedMessages = new ArrayList<>(); // Creating a consumer client configuration AndesJMSConsumerClientConfiguration consumerConfig = new AndesJMSConsumerClientConfiguration(getAMQPPort(), ExchangeType.QUEUE, "firstMessageInvalidOnlyReceiverQueue"); consumerConfig.setAcknowledgeMode(JMSAcknowledgeMode.PER_MESSAGE_ACKNOWLEDGE); consumerConfig.setAsync(false); // Creating a publisher client configuration AndesJMSPublisherClientConfiguration publisherConfig = new AndesJMSPublisherClientConfiguration( getAMQPPort(), ExchangeType.QUEUE, "firstMessageInvalidOnlyReceiverQueue"); publisherConfig.setNumberOfMessagesToSend(sendCount); publisherConfig.setPrintsPerMessageCount(sendCount / 10L); // Creating clients AndesClient consumerClient = new AndesClient(consumerConfig, true); final AndesJMSConsumer andesJMSConsumer = consumerClient.getConsumers().get(0); final MessageConsumer receiver = andesJMSConsumer.getReceiver(); Thread messageReceivingThread = new Thread() { private boolean receivedFirstMessage = false; public void run() { while (receiver != null) { try { TextMessage textMessage = (TextMessage) receiver.receive(); if (!receivedFirstMessage && "#0".equals(textMessage.getText())) { receivedFirstMessage = true; } else { textMessage.acknowledge(); } receivedMessages.add(ImmutablePair.of(textMessage.getText(), Calendar.getInstance())); andesJMSConsumer.getReceivedMessageCount().incrementAndGet(); } catch (JMSException e) { throw new RuntimeException("Exception occurred when receiving messages.", e); } } } }; messageReceivingThread.start(); AndesClient publisherClient = new AndesClient(publisherConfig, true); AndesJMSPublisher andesJMSPublisher = publisherClient.getPublishers().get(0); MessageProducer sender = andesJMSPublisher.getSender(); for (int i = 0; i < sendCount; i++) { TextMessage textMessage = andesJMSPublisher.getSession().createTextMessage("#" + Integer.toString(i)); sender.send(textMessage); } AndesClientUtils.waitForMessagesAndShutdown(consumerClient, AndesClientConstants.DEFAULT_RUN_TIME); log.info("Received Messages : " + getMessageList(receivedMessages)); for (int i = 0; i < sendCount; i++) { Assert.assertEquals(receivedMessages.get(i).getLeft(), "#" + Integer.toString(i), "Invalid messages received. #" + Integer.toString(i) + " expected."); } validateMessageContentAndDelay(receivedMessages, 0, 10, "#0"); Assert.assertEquals(receivedMessages.size(), sendCount + 1, "Message receiving failed."); }
From source file:org.wso2.mb.integration.tests.amqp.functional.RedeliveryDelayTestCase.java
/** * This test publishes 10 messages and the subscriber rejects all message and then wait for the redelivered * message./*from ww w.j a va2 s. co m*/ * <p/> * The redelivered message is tested against the same message content with the original message and the timestamps * are also checked against the original message timestamp to make sure that the message was delayed. * Here message receive method is used instead of the message listener to receive messages. * * @throws AndesClientConfigurationException * @throws XPathExpressionException * @throws IOException * @throws JMSException * @throws AndesClientException * @throws NamingException */ @Test(groups = { "wso2.mb", "queue" }) public void allUnacknowledgeMessageReceiverTestCase() throws AndesClientConfigurationException, XPathExpressionException, IOException, JMSException, AndesClientException, NamingException { int sendCount = 10; final List<ImmutablePair<String, Calendar>> receivedMessages = new ArrayList<>(); // Creating a consumer client configuration AndesJMSConsumerClientConfiguration consumerConfig = new AndesJMSConsumerClientConfiguration(getAMQPPort(), ExchangeType.QUEUE, "multipleUnacknowledgeReceiverQueue"); consumerConfig.setAcknowledgeMode(JMSAcknowledgeMode.PER_MESSAGE_ACKNOWLEDGE); consumerConfig.setAsync(false); // Creating a publisher client configuration AndesJMSPublisherClientConfiguration publisherConfig = new AndesJMSPublisherClientConfiguration( getAMQPPort(), ExchangeType.QUEUE, "multipleUnacknowledgeReceiverQueue"); publisherConfig.setNumberOfMessagesToSend(sendCount); // Creating clients AndesClient consumerClient = new AndesClient(consumerConfig, true); final AndesJMSConsumer andesJMSConsumer = consumerClient.getConsumers().get(0); final MessageConsumer receiver = andesJMSConsumer.getReceiver(); Thread messageReceivingThread = new Thread() { public void run() { while (receiver != null) { try { TextMessage textMessage = (TextMessage) receiver.receive(); if (getMessageList(receivedMessages).contains(textMessage.getText())) { textMessage.acknowledge(); } receivedMessages.add(ImmutablePair.of(textMessage.getText(), Calendar.getInstance())); andesJMSConsumer.getReceivedMessageCount().incrementAndGet(); } catch (JMSException e) { throw new RuntimeException("Exception occurred when receiving messages.", e); } } } }; messageReceivingThread.start(); AndesClient publisherClient = new AndesClient(publisherConfig, true); AndesJMSPublisher andesJMSPublisher = publisherClient.getPublishers().get(0); MessageProducer sender = andesJMSPublisher.getSender(); for (int i = 0; i < sendCount; i++) { TextMessage textMessage = andesJMSPublisher.getSession().createTextMessage("#" + Integer.toString(i)); sender.send(textMessage); } AndesClientUtils.waitForMessagesAndShutdown(consumerClient, AndesClientConstants.DEFAULT_RUN_TIME); log.info("Received Messages : " + getMessageList(receivedMessages)); for (int i = 0; i < sendCount * 2; i++) { if (i < sendCount) { Assert.assertEquals(receivedMessages.get(i).getLeft(), "#" + Integer.toString(i), "Invalid messages received. #" + Integer.toString(i) + " expected."); } else { validateMessageContentAndDelay(receivedMessages, i - sendCount, i, "#" + Integer.toString(i - sendCount)); } } Assert.assertEquals(receivedMessages.size(), sendCount * 2, "Message receiving failed."); }
From source file:org.wso2.mb.integration.tests.amqp.functional.RedeliveryDelayTestCase.java
/** * This test publishes 10 messages and the subscriber rejects a message after each 3 received messages and then wait * for the redelivered message./* w ww.j a v a 2 s . com*/ * <p/> * The redelivered message is tested against the same message content with the original message and the timestamps * are also checked against the original message timestamp to make sure that the message was delayed. * Here message receive method is used instead of the message listener to receive messages. * * @throws AndesClientConfigurationException * @throws XPathExpressionException * @throws IOException * @throws JMSException * @throws AndesClientException * @throws NamingException */ @Test(groups = { "wso2.mb", "queue" }) public void oneByOneUnacknowledgeMessageReceiverTestCase() throws AndesClientConfigurationException, XPathExpressionException, IOException, JMSException, AndesClientException, NamingException { long sendCount = 10; final List<ImmutablePair<String, Calendar>> receivedMessages = new ArrayList<>(); // Creating a consumer client configuration AndesJMSConsumerClientConfiguration consumerConfig = new AndesJMSConsumerClientConfiguration(getAMQPPort(), ExchangeType.QUEUE, "oneByOneUnacknowledgeReceiverQueue"); consumerConfig.setAcknowledgeMode(JMSAcknowledgeMode.PER_MESSAGE_ACKNOWLEDGE); consumerConfig.setAsync(false); // Creating a publisher client configuration AndesJMSPublisherClientConfiguration publisherConfig = new AndesJMSPublisherClientConfiguration( getAMQPPort(), ExchangeType.QUEUE, "oneByOneUnacknowledgeReceiverQueue"); publisherConfig.setNumberOfMessagesToSend(sendCount); // Creating clients AndesClient consumerClient = new AndesClient(consumerConfig, true); final AndesJMSConsumer andesJMSConsumer = consumerClient.getConsumers().get(0); final MessageConsumer receiver = andesJMSConsumer.getReceiver(); Thread messageReceivingThread = new Thread() { public void run() { while (receiver != null) { try { TextMessage textMessage = (TextMessage) receiver.receive(); if (Integer.parseInt(textMessage.getText().split("#")[1]) % 3 != 0 || getMessageList(receivedMessages).contains(textMessage.getText())) { textMessage.acknowledge(); } receivedMessages.add(ImmutablePair.of(textMessage.getText(), Calendar.getInstance())); andesJMSConsumer.getReceivedMessageCount().incrementAndGet(); } catch (JMSException e) { throw new RuntimeException("Exception occurred when receiving messages.", e); } } } }; messageReceivingThread.start(); AndesClient publisherClient = new AndesClient(publisherConfig, true); AndesJMSPublisher andesJMSPublisher = publisherClient.getPublishers().get(0); MessageProducer sender = andesJMSPublisher.getSender(); for (int i = 0; i < sendCount; i++) { TextMessage textMessage = andesJMSPublisher.getSession().createTextMessage("#" + Integer.toString(i)); sender.send(textMessage); } AndesClientUtils.waitForMessagesAndShutdown(consumerClient, AndesClientConstants.DEFAULT_RUN_TIME); log.info("Received Messages : " + getMessageList(receivedMessages)); for (int i = 0; i < sendCount; i++) { Assert.assertEquals(receivedMessages.get(i).getLeft(), "#" + Integer.toString(i), "Invalid messages received. #" + Integer.toString(i) + " expected."); } validateMessageContentAndDelay(receivedMessages, 0, 10, "#0"); validateMessageContentAndDelay(receivedMessages, 1, 11, "#3"); validateMessageContentAndDelay(receivedMessages, 2, 12, "#6"); validateMessageContentAndDelay(receivedMessages, 3, 13, "#9"); Assert.assertEquals(receivedMessages.size(), sendCount + 4, "Message receiving failed."); }
From source file:org.wso2.mb.integration.tests.amqp.functional.RedeliveryDelayTestCase.java
/** * This test publishes 10 messages and the subscriber rejects first 4 messages and then wait for the redelivered * message./*from w w w . j a v a 2 s . c o m*/ * <p/> * The redelivered message is tested against the same message content with the original message and the timestamps * are also checked against the original message timestamp to make sure that the message was delayed. * Here message receive method is used instead of the message listener to receive messages. * * @throws AndesClientConfigurationException * @throws XPathExpressionException * @throws IOException * @throws JMSException * @throws AndesClientException * @throws NamingException */ @Test(groups = { "wso2.mb", "queue" }) public void firstFewUnacknowledgeMessageReceiverTestCase() throws AndesClientConfigurationException, XPathExpressionException, IOException, JMSException, AndesClientException, NamingException { long sendCount = 10; final List<ImmutablePair<String, Calendar>> receivedMessages = new ArrayList<>(); // Creating a consumer client configuration AndesJMSConsumerClientConfiguration consumerConfig = new AndesJMSConsumerClientConfiguration(getAMQPPort(), ExchangeType.QUEUE, "firstFewUnacknowledgeReceiverQueue"); consumerConfig.setAcknowledgeMode(JMSAcknowledgeMode.PER_MESSAGE_ACKNOWLEDGE); consumerConfig.setAsync(false); // Creating a publisher client configuration AndesJMSPublisherClientConfiguration publisherConfig = new AndesJMSPublisherClientConfiguration( getAMQPPort(), ExchangeType.QUEUE, "firstFewUnacknowledgeReceiverQueue"); publisherConfig.setNumberOfMessagesToSend(sendCount); // Creating clients AndesClient consumerClient = new AndesClient(consumerConfig, true); final AndesJMSConsumer andesJMSConsumer = consumerClient.getConsumers().get(0); final MessageConsumer receiver = andesJMSConsumer.getReceiver(); Thread messageReceivingThread = new Thread() { public void run() { while (receiver != null) { try { TextMessage textMessage = (TextMessage) receiver.receive(); if (Integer.parseInt(textMessage.getText().split("#")[1]) >= 4 || getMessageList(receivedMessages).contains(textMessage.getText())) { textMessage.acknowledge(); } receivedMessages.add(ImmutablePair.of(textMessage.getText(), Calendar.getInstance())); andesJMSConsumer.getReceivedMessageCount().incrementAndGet(); } catch (JMSException e) { throw new RuntimeException("Exception occurred when receiving messages.", e); } } } }; messageReceivingThread.start(); AndesClient publisherClient = new AndesClient(publisherConfig, true); AndesJMSPublisher andesJMSPublisher = publisherClient.getPublishers().get(0); MessageProducer sender = andesJMSPublisher.getSender(); for (int i = 0; i < sendCount; i++) { TextMessage textMessage = andesJMSPublisher.getSession().createTextMessage("#" + Integer.toString(i)); sender.send(textMessage); } AndesClientUtils.waitForMessagesAndShutdown(consumerClient, AndesClientConstants.DEFAULT_RUN_TIME); log.info("Received Messages : " + getMessageList(receivedMessages)); for (int i = 0; i < sendCount; i++) { Assert.assertEquals(receivedMessages.get(i).getLeft(), "#" + Integer.toString(i), "Invalid messages received. #" + Integer.toString(i) + " expected."); } validateMessageContentAndDelay(receivedMessages, 0, 10, "#0"); validateMessageContentAndDelay(receivedMessages, 1, 11, "#1"); validateMessageContentAndDelay(receivedMessages, 2, 12, "#2"); validateMessageContentAndDelay(receivedMessages, 3, 13, "#3"); Assert.assertEquals(receivedMessages.size(), sendCount + 4, "Message receiving failed."); }
From source file:org.wso2.mb.integration.tests.amqp.functional.RedeliveryDelayTestCase.java
/** * This test publishes 10 messages and the subscriber rejects the 8th message and then wait for the redelivered * message.//from w ww.j a va 2s. com * <p/> * The redelivered message is tested against the same message content with the original message and the timestamps * are also checked against the original message timestamp to make sure that the message was delayed. * Here message receive method is used instead of the message listener to receive messages. * * @throws AndesClientConfigurationException * @throws XPathExpressionException * @throws IOException * @throws JMSException * @throws AndesClientException * @throws NamingException */ @Test(groups = { "wso2.mb", "queue" }) public void unacknowledgeMiddleMessageMessageReceiverTestCase() throws AndesClientConfigurationException, XPathExpressionException, IOException, JMSException, AndesClientException, NamingException { long sendCount = 10; final List<ImmutablePair<String, Calendar>> receivedMessages = new ArrayList<>(); // Creating a consumer client configuration AndesJMSConsumerClientConfiguration consumerConfig = new AndesJMSConsumerClientConfiguration(getAMQPPort(), ExchangeType.QUEUE, "unacknowledgeMiddleMessageReceiverQueue"); consumerConfig.setAcknowledgeMode(JMSAcknowledgeMode.PER_MESSAGE_ACKNOWLEDGE); consumerConfig.setAsync(false); // Creating a publisher client configuration AndesJMSPublisherClientConfiguration publisherConfig = new AndesJMSPublisherClientConfiguration( getAMQPPort(), ExchangeType.QUEUE, "unacknowledgeMiddleMessageReceiverQueue"); publisherConfig.setNumberOfMessagesToSend(sendCount); // Creating clients AndesClient consumerClient = new AndesClient(consumerConfig, true); final AndesJMSConsumer andesJMSConsumer = consumerClient.getConsumers().get(0); final MessageConsumer receiver = andesJMSConsumer.getReceiver(); Thread messageReceivingThread = new Thread() { public void run() { while (receiver != null) { try { TextMessage textMessage = (TextMessage) receiver.receive(); if (!textMessage.getText().equals("#7") || getMessageList(receivedMessages).contains(textMessage.getText())) { textMessage.acknowledge(); } receivedMessages.add(ImmutablePair.of(textMessage.getText(), Calendar.getInstance())); andesJMSConsumer.getReceivedMessageCount().incrementAndGet(); } catch (JMSException e) { throw new RuntimeException("Exception occurred when receiving messages.", e); } } } }; messageReceivingThread.start(); AndesClient publisherClient = new AndesClient(publisherConfig, true); AndesJMSPublisher andesJMSPublisher = publisherClient.getPublishers().get(0); MessageProducer sender = andesJMSPublisher.getSender(); for (int i = 0; i < sendCount; i++) { TextMessage textMessage = andesJMSPublisher.getSession().createTextMessage("#" + Integer.toString(i)); sender.send(textMessage); } AndesClientUtils.waitForMessagesAndShutdown(consumerClient, AndesClientConstants.DEFAULT_RUN_TIME); log.info("Received Messages : " + getMessageList(receivedMessages)); for (int i = 0; i < sendCount; i++) { Assert.assertEquals(receivedMessages.get(i).getLeft(), "#" + Integer.toString(i), "Invalid messages received. #" + Integer.toString(i) + " expected."); } validateMessageContentAndDelay(receivedMessages, 6, 10, "#7"); Assert.assertEquals(receivedMessages.size(), sendCount + 1, "Message receiving failed."); }
From source file:org.wso2.mb.integration.tests.amqp.functional.RedeliveryDelayTestCase.java
/** * This test publishes 1000 messages and the subscriber reject each 100th message and then wait for the redelivered * message.//from w w w . ja v a 2 s .c om * <p/> * The redelivered message is tested against the same message content with the original message and the timestamps * are also checked against the original message timestamp to make sure that the message was delayed. * Here message receive method is used instead of the message listener to receive messages. * * @throws AndesClientConfigurationException * @throws XPathExpressionException * @throws IOException * @throws JMSException * @throws AndesClientException * @throws NamingException */ @Test(groups = { "wso2.mb", "queue" }) public void oneByOneUnacknowledgeMessageReceiverForMultipleMessagesTestCase() throws AndesClientConfigurationException, XPathExpressionException, IOException, JMSException, AndesClientException, NamingException { long sendCount = 1000; final List<ImmutablePair<String, Calendar>> receivedMessages = new ArrayList<>(); // Creating a consumer client configuration AndesJMSConsumerClientConfiguration consumerConfig = new AndesJMSConsumerClientConfiguration(getAMQPPort(), ExchangeType.QUEUE, "oneByOneUnacknowledgeMessageReceiverForMultipleQueue"); consumerConfig.setAcknowledgeMode(JMSAcknowledgeMode.PER_MESSAGE_ACKNOWLEDGE); consumerConfig.setAsync(false); // Creating a publisher client configuration AndesJMSPublisherClientConfiguration publisherConfig = new AndesJMSPublisherClientConfiguration( getAMQPPort(), ExchangeType.QUEUE, "oneByOneUnacknowledgeMessageReceiverForMultipleQueue"); publisherConfig.setNumberOfMessagesToSend(sendCount); // Creating clients AndesClient consumerClient = new AndesClient(consumerConfig, true); final AndesJMSConsumer andesJMSConsumer = consumerClient.getConsumers().get(0); final MessageConsumer receiver = andesJMSConsumer.getReceiver(); Thread messageReceivingThread = new Thread() { public void run() { while (receiver != null) { try { TextMessage textMessage = (TextMessage) receiver.receive(); if (Integer.parseInt(textMessage.getText().split("#")[1]) % 100 != 0 || getMessageList(receivedMessages).contains(textMessage.getText())) { textMessage.acknowledge(); } receivedMessages.add(ImmutablePair.of(textMessage.getText(), Calendar.getInstance())); andesJMSConsumer.getReceivedMessageCount().incrementAndGet(); } catch (JMSException e) { throw new RuntimeException("Exception occurred when receiving messages.", e); } } } }; messageReceivingThread.start(); AndesClient publisherClient = new AndesClient(publisherConfig, true); AndesJMSPublisher andesJMSPublisher = publisherClient.getPublishers().get(0); MessageProducer sender = andesJMSPublisher.getSender(); for (int i = 0; i < sendCount; i++) { TextMessage textMessage = andesJMSPublisher.getSession().createTextMessage("#" + Integer.toString(i)); sender.send(textMessage); } AndesClientUtils.waitForMessagesAndShutdown(consumerClient, AndesClientConstants.DEFAULT_RUN_TIME * 2); log.info("Received Messages : " + getMessageList(receivedMessages)); for (int i = 0; i < sendCount; i++) { Assert.assertEquals(receivedMessages.get(i).getLeft(), "#" + Integer.toString(i), "Invalid messages received. #" + Integer.toString(i) + " expected."); } validateMessageContentAndDelay(receivedMessages, 0, 1000, "#0"); validateMessageContentAndDelay(receivedMessages, 99, 1001, "#100"); validateMessageContentAndDelay(receivedMessages, 199, 1002, "#200"); validateMessageContentAndDelay(receivedMessages, 299, 1003, "#300"); validateMessageContentAndDelay(receivedMessages, 399, 1004, "#400"); validateMessageContentAndDelay(receivedMessages, 499, 1005, "#500"); validateMessageContentAndDelay(receivedMessages, 599, 1006, "#600"); validateMessageContentAndDelay(receivedMessages, 699, 1007, "#700"); validateMessageContentAndDelay(receivedMessages, 799, 1008, "#800"); validateMessageContentAndDelay(receivedMessages, 899, 1009, "#900"); Assert.assertEquals(receivedMessages.size(), sendCount + 10, "Message receiving failed."); }