There are 100 message in IBM queue (insert_queue). I want to consume 10 and store in a object and process 10 consumed message and wait for some time, then acknowledge the 10 consumed messages.
My sample code:
public void consume(String queueName, int maxloadcount) throws Exception {
Source<Message, KillSwitch> jmsSource =
JmsConsumer.create(
JmsConsumerSettings.create(IBMQueueConnectionFactory.getMQQueueConnectionFactory())
.withQueue(queueName)
.withSessionCount(1)
.withBufferSize(10)
.withAcknowledgeMode(AcknowledgeMode.ClientAcknowledge()));
CompletionStage<List<Message>> result =
jmsSource
.take(maxloadcount)
.map(message -> {
return message;
})
.runWith(Sink.seq(), materializer);
final List<Message> outMessages = result.toCompletableFuture().get(3, TimeUnit.SECONDS);
for (Message outMsg : outMessages) {
BytesMessage msg = (BytesMessage) outMsg;
byte[] messageBody = msg.getBody(byte[].class);
System.out.println(new String(messageBody));
}
TimeUnit.SECONDS.sleep(5);
outMessages.stream().forEach(message -> {
try {
message.acknowledge();
}
catch (Exception e){
e.printStackTrace();
}
});
}
which is not working