All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.joyqueue.nsr.impl.ProducerNameServerServiceImpl Maven / Gradle / Ivy

/**
 * Copyright 2019 The JoyQueue 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.joyqueue.nsr.impl;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import org.joyqueue.convert.CodeConverter;
import org.joyqueue.convert.NsrProducerConverter;
import org.joyqueue.domain.ClientType;
import org.joyqueue.model.domain.OperLog;
import org.joyqueue.model.domain.Producer;
import org.joyqueue.model.query.QProducer;
import org.joyqueue.nsr.NameServerBase;
import org.joyqueue.nsr.ProducerNameServerService;
import org.joyqueue.nsr.model.ProducerQuery;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.stream.Collectors;

/**
 * Created by wangxiaofei1 on 2019/1/2.
 */
@Service("producerNameServerService")
public class ProducerNameServerServiceImpl extends NameServerBase implements ProducerNameServerService {

    public static final String ADD_PRODUCER="/producer/add";
    public static final String UPDATE_PRODUCER="/producer/update";
    public static final String REMOVE_PRODUCER="/producer/remove";
    public static final String GETBYID_PRODUCER="/producer/getById";
    public static final String GETBYTOPIC_PRODUCER="/producer/getByTopic";
    public static final String GETBYTOPICANDAPP_PRODUCER="/producer/getByTopicAndApp";
    public static final String GETBYAPP_PRODUCER="/producer/getByApp";

    private NsrProducerConverter nsrProducerConverter = new NsrProducerConverter();

    /**
     * 添加producer
     * @param producer
     * @throws Exception
     */
    @Override
    public int add(Producer producer) throws Exception {
        org.joyqueue.domain.Producer nsrProducer = nsrProducerConverter.convert(producer);
        String result = postWithLog(ADD_PRODUCER, nsrProducer, OperLog.Type.PRODUCER.value(),OperLog.OperType.ADD.value(),producer.getTopic().getCode());
        return isSuccess(result);
    }

    /**
     * 更新producer
     * @param producer
     * @throws Exception
     */
    @Override
    public int update(Producer producer) throws Exception {
        org.joyqueue.domain.Producer nsrProducer = nsrProducerConverter.convert(producer);
        String result1 = postWithLog(UPDATE_PRODUCER, nsrProducer,OperLog.Type.PRODUCER.value(),OperLog.OperType.UPDATE.value(),producer.getTopic().getCode());
        return isSuccess(result1);
    }

    /**
     * 删除producer
     * @param producer
     * @throws Exception
     */
    @Override
    public int delete(Producer producer) throws Exception {
        org.joyqueue.domain.Producer nsrProducer = new org.joyqueue.domain.Producer();
        nsrProducer.setApp(producer.getApp().getCode());
        nsrProducer.setClientType(ClientType.valueOf(producer.getClientType()));
        nsrProducer.setTopic(CodeConverter.convertTopic(producer.getNamespace(),producer.getTopic()));
        String result = postWithLog(REMOVE_PRODUCER, nsrProducer,OperLog.Type.PRODUCER.value(),OperLog.OperType.DELETE.value(),producer.getTopic().getCode());
        return isSuccess(result);
    }

//    @Override
//    public List syncProducer(byte clientType) throws Exception {
//        JSONObject request = new JSONObject();
//        request.put("client_type",clientType);
//        List  nsrProducers = JSONArray.parseArray(post(PRODUCER_GETALL_BY_CLIENTTYPE,request), org.joyqueue.domain.Producer.class);
//        List producerList = new ArrayList<>(nsrProducers.size());
//        nsrProducers.forEach(nsrProducer->{
//            Producer producer = new Producer();
//            TopicName nt = nsrProducer.getTopic();
//            producer.setApp(new Identity(null,nsrProducer.getApp()));
//            if(nt.getNamespace().equals(TopicName.DEFAULT_NAMESPACE)){
//                producer.setNamespace(new Namespace(DEFAULT_NAMESPACE_ID, DEFAULT_NAMESPACE_CODE));
//            }else{
//                producer.setNamespace(new Namespace(nt.getNamespace()));
//            }
//            producer.setTopic(new Topic(null,EscapeUtils.reEscapeTopic(nt.getCode())));
//            //producer.setSubscribeGroup(ag[1]);
//            producer.setClientType(nsrProducer.getClientType().value());
//            producerList.add(producer);
//        });
//        return producerList;
//    }


    @Override
    public List findByApp(String app) throws Exception {
        ProducerQuery producerQuery = new ProducerQuery();
        producerQuery.setApp(app);
        String result = post(GETBYAPP_PRODUCER,producerQuery);
        List producerList = JSON.parseArray(result).toJavaList(org.joyqueue.domain.Producer.class);
        return producerList.stream().map(producer -> nsrProducerConverter.revert(producer)).collect(Collectors.toList());
    }

    @Override
    public List findByTopic(String topic, String namespace) throws Exception {
        ProducerQuery producerQuery = new ProducerQuery();
        producerQuery.setTopic(topic);
        producerQuery.setNamespace(namespace);
        String result = post(GETBYTOPIC_PRODUCER,producerQuery);
        List producerList = JSON.parseArray(result).toJavaList(org.joyqueue.domain.Producer.class);
        return producerList.stream().map(producer -> nsrProducerConverter.revert(producer)).collect(Collectors.toList());
    }

    @Override
    public Producer findById(String nsrProducerId) throws Exception {
        String result = post(GETBYID_PRODUCER,nsrProducerId);
        org.joyqueue.domain.Producer nsrProducer = JSONObject.parseObject(result, org.joyqueue.domain.Producer.class);
        return nsrProducerConverter.revert(nsrProducer);
    }

    @Override
    public Producer findByTopicAppGroup(String namespace, String topic, String app) throws Exception {
        ProducerQuery producerQuery = new ProducerQuery();
        producerQuery.setTopic(topic);
        producerQuery.setNamespace(namespace);
        producerQuery.setApp(app);
        String result = post(GETBYTOPICANDAPP_PRODUCER,producerQuery);
        org.joyqueue.domain.Producer producer = JSON.parseObject(result, org.joyqueue.domain.Producer.class);
        return nsrProducerConverter.revert(producer);
    }
    private ProducerQuery producerQueryConvert(QProducer query){
        ProducerQuery producerQuery = new ProducerQuery();
        if (query != null) {
            if (query.getApp() != null) {
                producerQuery.setApp(query.getApp().getCode());
                if(query.getKeyword() != null ) {
                    producerQuery.setTopic(query.getKeyword());
                }
            }
            if (query.getTopic() != null) {
                producerQuery.setTopic(query.getTopic().getCode());
                if(query.getKeyword() != null ) {
                    producerQuery.setApp(query.getKeyword());
                }
            }
            if (query.getTopic() != null && query.getTopic().getNamespace() != null) {
                producerQuery.setNamespace(query.getTopic().getNamespace().getCode());
            }
            if (query.getAppList() != null) {
                producerQuery.setAppList(query.getAppList());
            }
        }
        return producerQuery;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy