Commit d5775c3f authored by 李欣峰's avatar 李欣峰

<dev>

1.代码同步(2021/10/09)
parent be6d1b21
package com.zorkdata.apiservice.gateway.config;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.gateway.route.RouteLocator;
import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
import javax.validation.Valid;
/**
* @author zyw
* @create 2021-10-08-17:57
......@@ -13,11 +16,15 @@ import org.springframework.web.client.RestTemplate;
@Configuration
public class GateWayConfig {
@Value("${api-service-address.uri}")
private String uri;
@Value("${api-service-address.path}")
private String path;
@Bean
public RouteLocator routeLocator(RouteLocatorBuilder routeLocatorBuilder){
RouteLocatorBuilder.Builder routes = routeLocatorBuilder.routes();
routes.route("api-router", r->r.path("/apiservice/**")
.uri("http://localhost:9086")).build();
routes.route("api-router", r->r.path(path).uri(uri)).build();
return routes.build();
}
......
package com.zorkdata.apiservice.gateway.schedule;
import com.google.gson.Gson;
import io.github.bucket4j.Bandwidth;
import io.github.bucket4j.Bucket4j;
import io.github.bucket4j.Refill;
import io.github.bucket4j.local.LocalBucket;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.configurationprocessor.json.JSONArray;
import org.springframework.boot.configurationprocessor.json.JSONException;
import org.springframework.boot.configurationprocessor.json.JSONObject;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
......@@ -24,6 +29,7 @@ public class RefreshApiLimitSchedule {
@Autowired
private RestTemplate restTemplate;
/**
* 添加定时任务
* 每小时执行一次
......@@ -32,13 +38,39 @@ public class RefreshApiLimitSchedule {
@PostConstruct
private void refreshTask() {
String url = "http://";
int capacity = 2000;//桶的最大容量,即能装载 Token 的最大数量
int refillTokens = 2000; //每次 Token 补充量
Duration duration = Duration.ofSeconds(1); //补充 Token 的时间间隔
Refill refill = Refill.greedy(refillTokens, duration);
Bandwidth limit = Bandwidth.classic(capacity, refill);
ApiLimitCache.BUCKET_CACHE.put("api",Bucket4j.builder().addLimit(limit).build());
String url = "http://127.0.0.1:6725/v1/dataService/api/getApiLimit";
String queryResult = restTemplate.getForObject(url, String.class);
try {
JSONObject jo = new JSONObject(queryResult);
JSONArray data = jo.getJSONArray("data");
for (int i = 0; i < data.length(); i++) {
JSONObject o = (JSONObject)data.get(i);
String name = o.get("name").toString();
Integer single_limit = Integer.parseInt(o.get("single_limit").toString());
int capacity = single_limit;//桶的最大容量,即能装载 Token 的最大数量
int refillTokens = single_limit; //每次 Token 补充量
Duration duration = Duration.ofSeconds(1); //补充 Token 的时间间隔
Refill refill = Refill.greedy(refillTokens, duration);
Bandwidth limit = Bandwidth.classic(capacity, refill);
LocalBucket bucket = Bucket4j.builder().addLimit(limit).build();
ApiLimitCache.BUCKET_CACHE.put(name,bucket);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}
......@@ -4,15 +4,9 @@ server:
spring:
application:
name: @artifactId@
# cloud:
# gateway:
# routes:
# - id: api-service
# uri: http://localhost:9086
# predicates:
# - Path=/apiservice/**
api-service-address:
path: /v1/apiService/**
uri: http://localhost:6725
......
......@@ -133,6 +133,7 @@ public interface ApiApplication {
/**
* 查询我创建的Api
*
* @param userId
* @param groupId
* @param keyword
......@@ -149,6 +150,7 @@ public interface ApiApplication {
/**
* 查询市场api
*
* @param keyword
* @param pageNo
* @param pageSize
......@@ -162,6 +164,7 @@ public interface ApiApplication {
/**
* 查看我授权的Api
*
* @param username
* @param pageNo
* @param pageSize
......@@ -187,6 +190,7 @@ public interface ApiApplication {
/**
* 接口执行的通用方法
*
* @param apiName
* @param inParam
* @param username
......@@ -224,4 +228,11 @@ public interface ApiApplication {
* @return
*/
InvokeResult queryAuthSingle(Integer apiId);
/**
* 获取Api Limit,name属性
*
* @return
*/
InvokeResult getApiLimit();
}
......@@ -28,6 +28,7 @@ import com.zorkdata.dddlib.core.sdk.InvokeResult;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.checkerframework.common.reflection.qual.Invoke;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
......@@ -745,6 +746,21 @@ public class ApiServiceApplicationImpl implements ApiApplication {
return invokeResult;
}
@Override
public InvokeResult getApiLimit() {
InvokeResult invokeResult;
try {
List<Map<String,Integer>> limitAndName = apiRepository.findLimitAndName();
invokeResult = InvokeResult.success();
invokeResult.setData(limitAndName);
} catch (Exception e) {
log.error("异常了,", e);
invokeResult = InvokeResult.fail();
invokeResult.setMessage("查询失败" + e.getMessage());
}
return invokeResult;
}
@Override
public InvokeResult executeApi(String apiName, Map<String, String> inParam, String username) {
//开始时间
......
package com.zorkdata.apiservice.domain.repository;
import com.zorkdata.apiservice.domain.domain.Api;
import com.zorkdata.apiservice.domain.dto.ApiDTO;
import com.zorkdata.dddlib.domain.EntityRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;
import java.util.Date;
import java.util.List;
import java.util.*;
/**
* @title: ApiServiceRepositoryB
......@@ -170,4 +170,7 @@ public interface ApiRepository extends EntityRepository<Api, Integer> {
@Query(value = "select count(*) from api_call where api_id = ?1 and call_time >= ?2 and call_time <= ?3", nativeQuery = true)
Integer findLastCall24ByApiCall(Integer apiId, Date startTime, Date endTime);
@Query(value = "select `name`,single_limit from api where status = 1",nativeQuery = true)
List<Map<String,Integer>> findLimitAndName();
}
......@@ -32,6 +32,7 @@ public interface ApiFacade {
/**
* 添加接口分组
*
* @param apiGroupDTO
* @param username
* @return
......@@ -69,6 +70,7 @@ public interface ApiFacade {
/**
* 新增Api接口
*
* @param apiDTO
* @param username
* @param userid
......@@ -86,6 +88,7 @@ public interface ApiFacade {
/**
* 添加接口授权
*
* @param apiAuthDTO
* @param username
* @return
......@@ -118,6 +121,7 @@ public interface ApiFacade {
/**
* 生成注册Api
*
* @param apiDTO
* @param username
* @param userid
......@@ -128,6 +132,7 @@ public interface ApiFacade {
/**
* 查询我创建的Api
*
* @param userId
* @param groupId
* @param keyword
......@@ -143,6 +148,7 @@ public interface ApiFacade {
/**
* 查看API市场
*
* @param keyword
* @param pageNo
* @param pageSize
......@@ -156,6 +162,7 @@ public interface ApiFacade {
/**
* 查看我授权的api
*
* @param username
* @param pageNo
* @param pageSize
......@@ -171,6 +178,7 @@ public interface ApiFacade {
/**
* 数据预览
*
* @param userId
* @param apiId
* @param username
......@@ -181,12 +189,13 @@ public interface ApiFacade {
/**
* ll
*
* @param apiName
* @param inParam
* @param username
* @return
*/
InvokeResult<Void> executeApi(String apiName, Map<String, String> inParam,String username);
InvokeResult<Void> executeApi(String apiName, Map<String, String> inParam, String username);
/**
* 获取Mysql数据类型
......@@ -197,6 +206,7 @@ public interface ApiFacade {
/**
* 获取SqlServer数据类型
*
* @return
*/
List<String> getSqlServerDataType();
......@@ -216,4 +226,13 @@ public interface ApiFacade {
* @return
*/
InvokeResult queryAuthSingle(Integer apiId);
/**
* 获取Api Limit,name属性
*
* @return
*/
InvokeResult getApiLimit();
}
......@@ -258,4 +258,9 @@ public class ApiServicueFacadeImpl implements ApiFacade {
return apiApplication.queryAuthSingle(apiId);
}
@Override
public InvokeResult getApiLimit() {
return apiApplication.getApiLimit();
}
}
......@@ -258,6 +258,13 @@ public class ApiServicueController extends BaseController {
return InvokeResult.success(dataTypes, "获取SqlServer数据类型成功!");
}
@Inner(value = false)
@GetMapping("/getApiLimit")
public InvokeResult getApiLimit() {
return apiFacade.getApiLimit();
}
@Inner(value = false)
@PostMapping("/executeApi")
public InvokeResult executeApi(@RequestParam String apiName,
......@@ -268,6 +275,24 @@ public class ApiServicueController extends BaseController {
}
@Inner(value = false)
@PutMapping("/csPut/{id}")
public InvokeResult csPut(@RequestParam String name,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment