Package com.taobao.meta.test

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

package com.taobao.meta.test;

import static org.junit.Assert.assertEquals;

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
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.MessageListener;


/**
* meta���ɲ���_OneProducerOneConsumer
*
* @author gongyangyu(gongyangyu@taobao.com)
*
*/
public class MesageSetRollbackOnlyTest extends BaseMetaTest {

    private final String topic = "meta-test";


    @Test(timeout = 60000)
    public void sendConsume() throws Exception {
        this.createProducer();
        this.producer.publish(this.topic);
        // �����߱���ָ������
        this.createConsumer("group1");

        try {
            // ������Ϣ
            int count = 5;
            for (int i = 0; i < count; i++) {
                this.sendMessage(1, "hello" + i, this.topic);
            }

            final ConcurrentHashMap<String, AtomicInteger> counterMap = new ConcurrentHashMap<String, AtomicInteger>();
            final AtomicInteger total = new AtomicInteger();
            // ���Ľ�����Ϣ����֤������ȷ
            this.consumer.subscribe(this.topic, 1024, new MessageListener() {

                public void recieveMessages(Message message) throws InterruptedException {
                    String body = new String(message.getData());
                    AtomicInteger counter = counterMap.get(body);
                    if (counter == null) {
                        counter = new AtomicInteger(0);
                        AtomicInteger oldCounter = counterMap.putIfAbsent(body, counter);
                        if (oldCounter != null) {
                            counter = oldCounter;
                        }
                    }
                    if (counter.incrementAndGet() <= 2) {
                        message.setRollbackOnly();
                    }
                    total.incrementAndGet();

                }


                public Executor getExecutor() {
                    // TODO Auto-generated method stub
                    return null;
                }
            }).completeSubscribe();

            while (total.get() < 3 * count) {
                Thread.sleep(1000);
                System.out.println("���յ�" + total.get() + "��Ϣ");
            }
            Thread.sleep(5000);
            assertEquals(count, counterMap.size());
            assertEquals(15, total.get());
            for (Map.Entry<String, AtomicInteger> entry : counterMap.entrySet()) {
                assertEquals(3, entry.getValue().get());
            }
        }
        finally {
            this.producer.shutdown();
            this.consumer.shutdown();
        }

    }
}
TOP

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

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.