Package com.taobao.meta.test

Source Code of com.taobao.meta.test.ComsumeFailAndRetryTest

package com.taobao.meta.test;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;

import java.util.Arrays;
import java.util.concurrent.Executor;
import java.util.concurrent.atomic.AtomicInteger;

import org.junit.Test;

import com.taobao.metamorphosis.Message;
import com.taobao.metamorphosis.client.consumer.ConsumerConfig;
import com.taobao.metamorphosis.client.consumer.MessageListener;


/**
* ��Ϣ����ʧ��,���Ե���û����recover
*
* @author �޻�
* @since 2011-11-14 ����6:45:35
*/

public class ComsumeFailAndRetryTest extends BaseMetaTest {

    private final String topic = "meta-test";


    // @Override
    // @Before
    // public void setUp() throws Exception {
    // final MetaClientConfig metaClientConfig = new MetaClientConfig();
    // metaClientConfig.setRecoverMessageIntervalInMills(2000);// recoverʱ���һЩ
    // metaClientConfig.setDiamondZKDataId(Utils.diamondZKDataId);
    // this.sessionFactory = new MetaMessageSessionFactory(metaClientConfig);
    // this.startServer("server1");
    // System.out.println("before run");
    // }

    @Test
    public void sendConsume() throws Exception {
        this.createProducer();
        this.producer.publish(this.topic);
        ConsumerConfig consumerConfig = new ConsumerConfig("group1");
        consumerConfig.setMaxFetchRetries(10);
        this.consumer = this.sessionFactory.createConsumer(consumerConfig);
        final AtomicInteger i = new AtomicInteger(0);
        try {
            // ����֮ǰ�ȷ��ͼ�����Ϣ
            int count = 2;
            final int failTimes = 2;
            assertTrue(failTimes < consumerConfig.getMaxFetchRetries());
            this.sendMessage(count, "hello", this.topic);

            this.consumer.subscribe(topic, 1024 * 1024, new MessageListener() {

                public void recieveMessages(final Message messages) {
                    ComsumeFailAndRetryTest.this.queue.add(messages);
                    if (Arrays.equals(messages.getData(), "hello1".getBytes()) && i.get() < failTimes) {
                        i.incrementAndGet();
                        throw new RuntimeException("don't worry,just for test");
                    }
                }


                public Executor getExecutor() {
                    return null;
                }
            }).completeSubscribe();

            while (this.queue.size() < count + failTimes) {
                Thread.sleep(1000);
                System.out.println("�ȴ�������Ϣ" + (count + failTimes) + "����Ŀǰ���յ�" + this.queue.size() + "��");
            }

            int j = 0;
            for (Message msg : this.queue) {
                if (Arrays.equals(msg.getData(), "hello1".getBytes())) {
                    ++j;
                }
            }
            assertEquals(j, failTimes + 1);

        }
        finally {
            producer.shutdown();
            consumer.shutdown();
        }
    }
}
TOP

Related Classes of com.taobao.meta.test.ComsumeFailAndRetryTest

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.