QueueSession session = connection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE); SQSQueueDestination queue = (SQSQueueDestination) session.createQueue(TEST_QUEUE_FIFO); MessageProducer producer = session.createProducer(queue);
TextMessage txtMsg = queueSession_.createTextMessage("this is a test");
txtMsg.setStringProperty("JMSXGroupID", "Default"); txtMsg.setStringProperty("JMS_SQS_DeduplicationId", UUID.randomUUID().toString());
producer_.send(txtMsg);
QueueSession session = connection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE); SQSQueueDestination queue = (SQSQueueDestination) session.createQueue(TEST_QUEUE_FIFO); MessageConsumer consumer = session.createConsumer(queue);
System.out.println(consumer.receive());
AmazonSQS sqs = connection.getAmazonSQSClient(); final ReceiveMessageRequest receiveMessageRequest = new ReceiveMessageRequest(queue.getQueueUrl()); final List<Message> messages = sqs.receiveMessage(receiveMessageRequest).getMessages(); System.out.println(messages);
C:\>aws --endpoint-url http://localhost:9324 sqs receive-message --queue-url http://localhost:9324/queue/testQueue.fifo{ "Messages": [ { "MessageId": "22511ffb-3221-467d-a776-aa9ffa65f7b6", "ReceiptHandle": "22511ffb-3221-467d-a776-aa9ffa65f7b6#1b0fe493-09c7-4027-b163-496950aaf9bf", "MD5OfBody": "54b0c58c7ce9f2a8b551351102ee0938", "Body": "this is a test" } ]}
OK... I found the reason why... We do not see how I create the SQSConnection but I forgot to call the SQSConnection.start() on the instanciated class.
public SQSConnection createConnection() throws Exception { SQSConnection connection = connectionFactory.createConnection(); connection.start(); //<-- This was missing return connection; }
Seems like only on the receiving of messages that this call is required!