Hi,

I have written a standalone program PublishBenchmark.java (please see below)   
using Jedis to publish a 2K message to a Redis Channel 100,000 times. 
I repeat the same process using Camel 2.11.1  Camel spring redis component 
(Please see RedisPublisherBenchmark.java below).
Below is timing for both.

Jedis :  Time taken (in sec) to publish 100000 msgs=1.805
Camel spring redis : Time taken (in sec) to publish 100000 msgs=16.017

Is my configuration for Camel spring redis optimal ?
Is it  expected that Camel spring redis  about 8 times slower than a standalone 
Jedis program ?

Thanks in advance for any assistance !

Shing 



public class RedisPublisherBenchmark {

    public static void main(String[] args) throws Exception {

        JedisShardInfo hostInfo = new JedisShardInfo("localhost", 6379);
        hostInfo.setPassword("abc123");
        final JedisConnectionFactory CONNECTION_FACTORY = new 
JedisConnectionFactory(
                hostInfo);

        RedisTemplate<String, String> redisTemplate = new RedisTemplate<String, 
String>();
        redisTemplate.setConnectionFactory(CONNECTION_FACTORY);
        // redisTemplate.afterPropertiesSet();

        SimpleRegistry registry = new SimpleRegistry();
        registry.put("redisTemplate", redisTemplate);

        // To get rid of Hex padding
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setValueSerializer(new StringRedisSerializer());

        // create CamelContext
        CamelContext context = new DefaultCamelContext(registry);
        Component direct = new DirectComponent();

        context.addComponent("start", direct);

        final String directEndPoint = "direct:start";

        context.addRoutes(new RouteBuilder() {
            @Override
            public void configure() throws Exception {
                from("direct:start")
                        
.to("spring-redis://localhost:6379?redisTemplate=#redisTemplate");
            }
        });
        context.start();

        ProducerTemplate template = context.createProducerTemplate();
        final String payload = getPayload();
        
        
        int NO_OF_MSGS= 100000;
        final Processor processor = new RedisProcessor(payload);

        long start = System.currentTimeMillis();
        
        for (int i = 0; i <NO_OF_MSGS ; ++i) {
            // Publish "Hello world" to a redis channel
            Exchange exchange = template.send(directEndPoint, processor);
        }
        
        long end = System.currentTimeMillis();
        double timeTaken = (end - start)/1000.0;
        
        System.out.println(String.format("Time taken (in sec) to publish %s 
msgs=%s", NO_OF_MSGS,timeTaken));
        
        System.out.println("Press any key to shutdown.");
        BufferedReader br = new BufferedReader(new 
InputStreamReader(System.in));
        br.readLine();

        // stop the CamelContext
        context.stop();
    }

    private static String getPayload() {
        String template = "name11:foo11";

        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < 170; ++i) {
            sb.append(template);
        }

        return sb.toString();

    }

    private static class RedisProcessor implements Processor {

        public String message;

        public RedisProcessor(String message) {
            this.message = message;
        }

        @Override
        public void process(Exchange exchange) throws Exception {
            Message in = exchange.getIn();

            in.setHeader(RedisConstants.COMMAND, "PUBLISH");
            in.setHeader(RedisConstants.CHANNEL, "msjscollector");
            in.setHeader(RedisConstants.MESSAGE, message);

        }

    }

}

============================

public class PublishBenchmark {

    private static final int NO_OF_MSGS = 100000;

    public static void main(String[] args) throws UnknownHostException,
            IOException {
        Jedis jedis = new Jedis("localhost", 6379);
        jedis.connect();
        jedis.auth("abc123");
        jedis.flushAll();

        long begin = System.currentTimeMillis();

        String payload = getPayload();
        
        for (int n = 0; n <= NO_OF_MSGS; ++n) {
            jedis.publish("msjscollector", payload);
            
        }

        double timeTaken = (System.currentTimeMillis() - begin)/1000.0;

        jedis.disconnect();

        System.out.println(String.format("Time taken (in sec) to publish %s 
msgs=%s", NO_OF_MSGS,timeTaken));
    }

    
    private static String  getPayload(){
        String template ="name11:foo11";  
        
        StringBuilder sb = new StringBuilder();
        for (int i=0; i < 170; ++i){
            sb.append(template);
        }
        
        return sb.toString();
        
        
    }
}

Reply via email to