ServiceIdCacheGuavaService.java 2.3 KB
Newer Older
P
peng-yongsheng 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
/*
 * Copyright 2017, OpenSkywalking Organization All rights reserved.
 *
 * 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.
 *
 * Project repository: https://github.com/OpenSkywalking/skywalking
 */

19
package org.skywalking.apm.collector.cache.guava.service;
P
peng-yongsheng 已提交
20 21 22

import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder;
23
import org.skywalking.apm.collector.cache.service.ServiceIdCacheService;
P
peng-yongsheng 已提交
24 25
import org.skywalking.apm.collector.core.util.Const;
import org.skywalking.apm.collector.storage.dao.IServiceNameCacheDAO;
26
import org.skywalking.apm.collector.storage.service.DAOService;
P
peng-yongsheng 已提交
27 28 29 30 31 32
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * @author peng-yongsheng
 */
33
public class ServiceIdCacheGuavaService implements ServiceIdCacheService {
P
peng-yongsheng 已提交
34

35
    private final Logger logger = LoggerFactory.getLogger(ServiceIdCacheGuavaService.class);
P
peng-yongsheng 已提交
36

37
    private final Cache<String, Integer> SERVICE_CACHE = CacheBuilder.newBuilder().maximumSize(1000).build();
P
peng-yongsheng 已提交
38

39 40 41 42 43 44 45 46
    private final DAOService daoService;

    public ServiceIdCacheGuavaService(DAOService daoService) {
        this.daoService = daoService;
    }

    public int get(int applicationId, String serviceName) {
        IServiceNameCacheDAO dao = (IServiceNameCacheDAO)daoService.get(IServiceNameCacheDAO.class);
P
peng-yongsheng 已提交
47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63

        int serviceId = 0;
        try {
            serviceId = SERVICE_CACHE.get(applicationId + Const.ID_SPLIT + serviceName, () -> dao.getServiceId(applicationId, serviceName));
        } catch (Throwable e) {
            logger.error(e.getMessage(), e);
        }

        if (serviceId == 0) {
            serviceId = dao.getServiceId(applicationId, serviceName);
            if (serviceId != 0) {
                SERVICE_CACHE.put(applicationId + Const.ID_SPLIT + serviceName, serviceId);
            }
        }
        return serviceId;
    }
}