Package com.taobao.metamorphosis.client.extension.producer

Source Code of com.taobao.metamorphosis.client.extension.producer.OrderedMessagePartitionSelector

/*
* (C) 2007-2012 Alibaba Group Holding Limited.
*
* 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.
* Authors:
*   wuhua <wq163@163.com> , boyan <killme2008@gmail.com>
*/
package com.taobao.metamorphosis.client.extension.producer;

import java.util.List;

import com.taobao.metamorphosis.Message;
import com.taobao.metamorphosis.cluster.Partition;
import com.taobao.metamorphosis.exception.MetaClientException;


/**
* <pre>
* ֧�ֻ�ȡijtopic��������,��ǰ���÷����������÷�������Ӧʱ ���׳�һ��������쳣
* <code>AvailablePartitionNumException</code>, �Ա㷢����Ϣʱ��ʶ�����ʧ��ԭ��,�Ӷ�����Ӧ����.
*
* ��Ҫ������Ϣ����(����ij��id)ɢ�е��̶�������Ҫ������ij�����ʹ��
* </pre>
*
* @author �޻�
* @since 2011-8-2 ����4:41:35
*/
// ������NumAwarePartitionSelector��������Ϊ,�����÷����������õķ�����Ϣ��һ��ʱ,��һ����Ҫ������һ�ַ�ʽ����,
// ������չ���
public abstract class OrderedMessagePartitionSelector extends ConfigPartitionsSupport {

    @Override
    public Partition getPartition(String topic, List<Partition> partitions, Message message) throws MetaClientException {
        int availablePartitionNum = partitions != null ? partitions.size() : 0;
        List<Partition> configPartitions = this.getConfigPartitions(topic);
        int configPartitionsNum = configPartitions.size();

        // ˳����Ϣû�����ù�����������Ϣ,���÷���Ϣ
        if (configPartitionsNum == 0) {
            throw new MetaClientException("There is no config partitions for topic " + topic
                    + ",maybe you don't config it at first?");
        }

        Partition selectedPartition = this.choosePartition(topic, configPartitions, message);
        if (selectedPartition == null) {
            throw new MetaClientException("selected null partition");
        }

        // ���÷�����Ϊ0,����˳����Ϣ��Ϊ����ʱû�п��÷���(����ֻ��һ̨������,������������),����Ϊ��û����topic,
        // ������Ϣд���ػ���
        if (availablePartitionNum == 0) {
            throw new AvailablePartitionNumException("selected partition[" + selectedPartition + "]for topic[" + topic
                    + "]can not write now");
        }

        // ���÷��������÷�����������ѡ�����ķ���,(�������û������,�׳��쳣�û��Լ�����)
        if (!configPartitions.contains(selectedPartition) && !partitions.contains(selectedPartition)) {
            throw new MetaClientException("invalid selected partition:" + selectedPartition
                    + ",config and availabe paritions not contains it");
        }

        // ���÷��������÷���������ѡ�����ķ���ʱ�ſ�д
        if (configPartitions.contains(selectedPartition) && partitions.contains(selectedPartition)) {
            return selectedPartition;
        }
        else {
            // ѡ�������������������д.
            // 1.���÷�����Ϣ����
            // 2.���÷�������(������ͣ������)
            throw new AvailablePartitionNumException("selected partition[" + selectedPartition + "]for topic[" + topic
                    + "]can not write now");
        }

    }


    protected abstract Partition choosePartition(String topic, List<Partition> partitions, Message message);

}
TOP

Related Classes of com.taobao.metamorphosis.client.extension.producer.OrderedMessagePartitionSelector

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.