Package org.springframework.amqp.rabbit.listener

Source Code of org.springframework.amqp.rabbit.listener.SimpleMessageListenerWithRabbitMQ$SimpleAdapter

/*
* Copyright 2002-2014 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package org.springframework.amqp.rabbit.listener;

import static org.junit.Assert.assertNotNull;

import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.concurrent.BlockingQueue;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import org.springframework.amqp.core.AcknowledgeMode;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessageProperties;
import org.springframework.amqp.rabbit.connection.CachingConnectionFactory;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.amqp.rabbit.listener.adapter.MessageListenerAdapter;
import org.springframework.amqp.support.converter.MessageConverter;
import org.springframework.amqp.support.converter.SimpleMessageConverter;
import org.springframework.beans.DirectFieldAccessor;

public class SimpleMessageListenerWithRabbitMQ {

  private static Log logger = LogFactory.getLog(SimpleMessageListenerWithRabbitMQ.class);


  public static void main(String[] args) throws InterruptedException {
    CachingConnectionFactory connectionFactory = new CachingConnectionFactory("localhost");
    connectionFactory.setHost("localhost");
    connectionFactory.setUsername("guest");
    connectionFactory.setPassword("guest");
    assertNotNull(connectionFactory);

    MessageConverter messageConverter = new SimpleMessageConverter();
    MessageProperties  messageProperties = new MessageProperties();
    messageProperties.setContentType(MessageProperties.CONTENT_TYPE_TEXT_PLAIN);

    SimpleMessageListenerContainer container = new SimpleMessageListenerContainer();
    container.setConnectionFactory(connectionFactory);
    container.setQueueNames("foo");
    container.setPrefetchCount(1000);
    container.setTxSize(500);
    container.setAcknowledgeMode(AcknowledgeMode.AUTO);
    container.setConcurrentConsumers(20);
    container.setMessageListener(new MessageListenerAdapter(new SimpleAdapter(),messageConverter));
    container.start();

    RabbitTemplate template = new RabbitTemplate(connectionFactory);
    template.setMessageConverter(messageConverter);
    List<BlockingQueue<?>> queues = getQueues(container);

    Thread.sleep(10000);
    int n = 0;
    while(true){
      for(int i=1; i<=200;i++){

        template.send("foo", "", new Message("foo # ID: id".replace("#", String.valueOf(i)).replace("id", java.util.UUID.randomUUID().toString()).getBytes(), messageProperties));

      }
      Thread.sleep(1000);
      if (++n % 10 == 0) {
        logger.warn(count(queues));
      }
    }
  }


  private static String count(List<BlockingQueue<?>> queues) {
    int n = 0;
    for (BlockingQueue<?> queue : queues) {
      n += queue.size();
    }
    return "Total queue size: " + n;
  }


  private static List<BlockingQueue<?>> getQueues(SimpleMessageListenerContainer container) {
    DirectFieldAccessor accessor = new DirectFieldAccessor(container);
    List<BlockingQueue<?>> queues = new ArrayList<BlockingQueue<?>>();
    @SuppressWarnings("unchecked")
    Set<BlockingQueueConsumer> consumers = (Set<BlockingQueueConsumer>) accessor.getPropertyValue("consumers");
    for (BlockingQueueConsumer consumer : consumers) {
      accessor = new DirectFieldAccessor(consumer);
      queues.add((BlockingQueue<?>) accessor.getPropertyValue("queue"));
    }
    return queues;
  }



  private static class SimpleAdapter{

    @SuppressWarnings("unused")
    public void handleMessage(String input) {
      logger.debug("Got it: " + input);
    }
  }

}
TOP

Related Classes of org.springframework.amqp.rabbit.listener.SimpleMessageListenerWithRabbitMQ$SimpleAdapter

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.