use of com.meltwater.rxrabbit.DefaultConsumerFactory in project rxrabbit by meltwater.
the class ExampleAppsTest method consumeDocumentsAndGetIds.
private Set<String> consumeDocumentsAndGetIds(int nrToPublish) throws InterruptedException {
final SortedSet<String> out = Collections.synchronizedSortedSet(new TreeSet<String>());
ConsumerFactory consumerFactory = new DefaultConsumerFactory(channelFactory, new ConsumerSettings());
consumerFactory.createConsumer(prop.getProperty("out.queue")).doOnNext(message -> message.acknowledger.ack()).doOnNext(message -> out.add(message.basicProperties.getMessageId())).take(nrToPublish).timeout(100, TimeUnit.SECONDS).toBlocking().last();
return out;
}
use of com.meltwater.rxrabbit.DefaultConsumerFactory in project rxrabbit by meltwater.
the class ExampleCode method publishAndConsume.
public int publishAndConsume(int numMessages, long maxWaitMillis, String brokerHost, int brokerPort, String queue, String exchange) throws IOException, InterruptedException {
// ---------- Set Up ----------
Logger logger = new Logger(ExampleCode.class);
final ConnectionSettings connectionSettings = new ConnectionSettings();
BrokerAddresses brokers = new BrokerAddresses(Lists.newArrayList(new BrokerAddresses.BrokerAddressBuilder().withHost(brokerHost).withPort(brokerPort).build()));
DefaultChannelFactory channelFactory = new DefaultChannelFactory(brokers, connectionSettings);
// Create queue, exchange and bind together
AdminChannel adminChannel = channelFactory.createAdminChannel();
adminChannel.exchangeDeclare(exchange, "topic", true, false, false, new HashMap<>());
adminChannel.queueDeclare(queue, true, false, false, new HashMap<>());
adminChannel.queueBind(queue, exchange, "#", new HashMap<>());
adminChannel.close();
// ---------- Publish messages ----------
final PublisherSettings publisherSettings = new PublisherSettings().withNumChannels(2).withPublisherConfirms(true).withRetryCount(3);
RabbitPublisher publisher = new DefaultPublisherFactory(channelFactory, publisherSettings).createPublisher();
Observable.range(0, numMessages).map(String::valueOf).flatMap((input) -> publisher.call(new Exchange(exchange), new RoutingKey("#"), new AMQP.BasicProperties(), new Payload(input.getBytes())).toObservable()).doOnError((e) -> logger.errorWithParams("Failed to publish message", e)).subscribe();
// ---------- Consume messages ----------
ConsumerSettings consumerSettings = new ConsumerSettings().withRetryCount(ConsumerSettings.RETRY_FOREVER).withNumChannels(1).withPreFetchCount(1024);
Observable<Message> consumer = new DefaultConsumerFactory(channelFactory, consumerSettings).createConsumer(queue);
final AtomicInteger consumedMessages = new AtomicInteger(0);
// save the Subscription so you can stop consuming later
Subscription consumeSubscription = consumer.doOnNext(message -> consumedMessages.incrementAndGet()).doOnNext(message -> message.acknowledger.ack()).subscribe();
try {
long startTime = System.currentTimeMillis();
while (consumedMessages.get() < numMessages) {
Thread.sleep(10);
if ((System.currentTimeMillis() - startTime) > maxWaitMillis) {
throw new RuntimeException("Did not receive all '" + numMessages + "' messages within '" + maxWaitMillis + "' millis.");
}
}
} finally {
// unsubscribe (closes consume channel, and the consume connection if there are no other consumers)
consumeSubscription.unsubscribe();
// closes publish channel, and the publish connection of there are no other publishers
publisher.close();
}
return consumedMessages.get();
}
Aggregations