diff --git a/dubbo/dubbo-examples/dubbo-router-example/pom.xml b/dubbo/dubbo-examples/dubbo-router-example/pom.xml
index 20a785c..2bbe6ee 100644
--- a/dubbo/dubbo-examples/dubbo-router-example/pom.xml
+++ b/dubbo/dubbo-examples/dubbo-router-example/pom.xml
@@ -9,6 +9,7 @@
../pom.xml
4.0.0
+
dubbo-router-example
pom
diff --git a/dubbo/dubbo-plugins/dubbo-circuitbreaker-polaris/src/main/java/com/tencent/polaris/dubbo/circuitbreaker/CircuitBreakerFilter.java b/dubbo/dubbo-plugins/dubbo-circuitbreaker-polaris/src/main/java/com/tencent/polaris/dubbo/circuitbreaker/CircuitBreakerFilter.java
index 13a5347..e9ef496 100644
--- a/dubbo/dubbo-plugins/dubbo-circuitbreaker-polaris/src/main/java/com/tencent/polaris/dubbo/circuitbreaker/CircuitBreakerFilter.java
+++ b/dubbo/dubbo-plugins/dubbo-circuitbreaker-polaris/src/main/java/com/tencent/polaris/dubbo/circuitbreaker/CircuitBreakerFilter.java
@@ -79,7 +79,7 @@ public Result invoke(Invoker> invoker, Invocation invocation) throws RpcExcept
if (serviceInfos.isEmpty() || Objects.isNull(operator)) {
return invoker.invoke(invocation);
}
- // 如果是熔断,只处理第一个的请求
+ // 如果是熔断,只选择第一个 DubboServiceInfo 进行作为熔断信息
DubboServiceInfo firstService = serviceInfos.get(0);
InvokeContext.RequestContext context = new InvokeContext.RequestContext(createCalleeService(firstService), firstService.getDubboInterface());
diff --git a/dubbo/dubbo-plugins/dubbo-configcenter-polaris/src/main/java/com/tencent/polaris/dubbo/configuration/PolarisDynamicConfiguration.java b/dubbo/dubbo-plugins/dubbo-configcenter-polaris/src/main/java/com/tencent/polaris/dubbo/configuration/PolarisDynamicConfiguration.java
index 62bed15..8f4eaba 100644
--- a/dubbo/dubbo-plugins/dubbo-configcenter-polaris/src/main/java/com/tencent/polaris/dubbo/configuration/PolarisDynamicConfiguration.java
+++ b/dubbo/dubbo-plugins/dubbo-configcenter-polaris/src/main/java/com/tencent/polaris/dubbo/configuration/PolarisDynamicConfiguration.java
@@ -26,6 +26,7 @@
import com.tencent.polaris.configuration.api.core.ConfigFile;
import com.tencent.polaris.configuration.api.core.ConfigFilePublishService;
import com.tencent.polaris.configuration.api.core.ConfigFileService;
+import com.tencent.polaris.configuration.api.rpc.ConfigPublishRequest;
import org.apache.dubbo.common.URL;
import org.apache.dubbo.common.config.configcenter.ConfigChangedEvent;
import org.apache.dubbo.common.config.configcenter.ConfigurationListener;
@@ -99,27 +100,49 @@ public Object getInternalProperty(String key) {
@Override
public boolean publishConfig(String key, String group, String content) throws UnsupportedOperationException {
try {
- ConfigFileResponse response = filePublisher.createConfigFile(polarisConfig.getNamespace(), group, key, content);
- if (response.getCode() == ServerCodes.EXISTED_RESOURCE) {
- response = filePublisher.updateConfigFile(polarisConfig.getNamespace(), group, key, content);
- }
+ ConfigPublishRequest request = new ConfigPublishRequest();
+ request.setNamespace(polarisConfig.getNamespace());
+ request.setGroup(group);
+ request.setFilename(key);
+ request.setContent(content);
+ ConfigFileResponse response = filePublisher.upsertAndPublish(request);
if (response.getCode() != ServerCodes.EXECUTE_SUCCESS) {
logger.error(
formatCode(response.getCode()),
response.getMessage(),
String.format("key(%s) group(%s)", key, group),
- "upsert config fail"
+ "release config fail"
);
return false;
}
- response = filePublisher.releaseConfigFile(polarisConfig.getNamespace(), group, key);
+ return true;
+ } catch (PolarisException e) {
+ logger.error(
+ formatCode(e.getCode()),
+ e.getMessage(),
+ String.format("key(%s) group(%s)", key, group),
+ "publish config fail");
+ return false;
+ }
+ }
+
+ @Override
+ public boolean publishConfigCas(String key, String group, String content, Object ticket) throws UnsupportedOperationException {
+ try {
+ ConfigPublishRequest request = new ConfigPublishRequest();
+ request.setNamespace(polarisConfig.getNamespace());
+ request.setGroup(group);
+ request.setFilename(key);
+ request.setContent(content);
+ request.setCasMd5(String.valueOf(ticket));
+ ConfigFileResponse response = filePublisher.upsertAndPublish(request);
if (response.getCode() != ServerCodes.EXECUTE_SUCCESS) {
logger.error(
formatCode(response.getCode()),
- response.getMessage(),
+ response.getMessage(),
String.format("key(%s) group(%s)", key, group),
"release config fail"
- );
+ );
return false;
}
return true;
diff --git a/dubbo/dubbo-plugins/dubbo-registry-polaris/src/main/java/com/tencent/polaris/dubbo/report/ReportFilter.java b/dubbo/dubbo-plugins/dubbo-registry-polaris/src/main/java/com/tencent/polaris/dubbo/report/ReportFilter.java
index 0c9d65c..9e9dfe4 100644
--- a/dubbo/dubbo-plugins/dubbo-registry-polaris/src/main/java/com/tencent/polaris/dubbo/report/ReportFilter.java
+++ b/dubbo/dubbo-plugins/dubbo-registry-polaris/src/main/java/com/tencent/polaris/dubbo/report/ReportFilter.java
@@ -36,7 +36,6 @@
import org.apache.dubbo.rpc.RpcContext;
import org.apache.dubbo.rpc.RpcException;
import org.apache.dubbo.rpc.model.ApplicationModel;
-import org.apache.dubbo.rpc.model.ScopeModelAware;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -45,80 +44,79 @@
@Activate(group = CommonConstants.CONSUMER, order = Integer.MIN_VALUE)
public class ReportFilter extends PolarisOperatorDelegate implements Filter, Filter.Listener {
- private static final String LABEL_START_TIME = "reporter_filter_start_time";
+ private static final String LABEL_START_TIME = "reporter_filter_start_time";
- private static final Logger LOGGER = LoggerFactory.getLogger(ReportFilter.class);
+ private static final Logger LOGGER = LoggerFactory.getLogger(ReportFilter.class);
- private ApplicationModel applicationModel;
+ private ApplicationModel applicationModel;
- public ReportFilter() {
- LOGGER.info("[POLARIS] init polaris reporter");
- }
+ public ReportFilter() {
+ LOGGER.info("[POLARIS] init polaris reporter");
+ }
- @Override
- public Result invoke(Invoker> invoker, Invocation invocation) throws RpcException {
- invocation.put(LABEL_START_TIME, System.currentTimeMillis());
- return invoker.invoke(invocation);
- }
+ @Override
+ public Result invoke(Invoker> invoker, Invocation invocation) throws RpcException {
+ invocation.put(LABEL_START_TIME, System.currentTimeMillis());
+ return invoker.invoke(invocation);
+ }
- @Override
- public void onResponse(Result appResponse, Invoker> invoker, Invocation invocation) {
- PolarisOperator polarisOperator = getGovernancePolarisOperator();
- if (null == polarisOperator) {
- return;
- }
- Long startTimeMilli = (Long) invocation.get(LABEL_START_TIME);
- RetStatus retStatus = RetStatus.RetSuccess;
- int code = 0;
- if (appResponse.hasException()) {
- retStatus = RetStatus.RetFail;
- code = -1;
- }
- URL url = invoker.getUrl();
- long delay = System.currentTimeMillis() - startTimeMilli;
- List serviceInfos = DubboUtils.analyzeRemoteDubboServiceInfo(invoker, invocation);
- for (DubboServiceInfo serviceInfo : serviceInfos) {
- polarisOperator.reportInvokeResult(serviceInfo.getService(), serviceInfo.getReportMethodName(), url.getHost(),
- url.getPort(), RpcContext.getServiceContext().getLocalHost(), delay, retStatus, code);
- }
- }
+ @Override
+ public void onResponse(Result appResponse, Invoker> invoker, Invocation invocation) {
+ PolarisOperator polarisOperator = getGovernancePolarisOperator();
+ if (null == polarisOperator) {
+ return;
+ }
+ Long startTimeMilli = (Long) invocation.get(LABEL_START_TIME);
+ RetStatus retStatus = RetStatus.RetSuccess;
+ int code = 0;
+ if (appResponse.hasException()) {
+ retStatus = RetStatus.RetFail;
+ code = -1;
+ }
+ URL providerUrl = invoker.getUrl();
+ // 判断是否是应用级注册
+ long delay = System.currentTimeMillis() - startTimeMilli;
+ List serviceInfos = DubboUtils.analyzeRemoteDubboServiceInfo(invoker, invocation);
+ DubboServiceInfo dubboServiceInfo = serviceInfos.get(0);
+ polarisOperator.reportInvokeResult(dubboServiceInfo.getService(), dubboServiceInfo.getReportMethodName(), providerUrl.getHost(),
+ providerUrl.getPort(), RpcContext.getServiceContext().getLocalHost(), delay, retStatus, code);
+ }
- @Override
- public void onError(Throwable t, Invoker> invoker, Invocation invocation) {
- PolarisOperator polarisOperator = getGovernancePolarisOperator();
- if (null == polarisOperator) {
- return;
- }
- Long startTimeMilli = (Long) invocation.get(LABEL_START_TIME);
- RetStatus retStatus = RetStatus.RetFail;
- int code = -1;
- if (t instanceof RpcException) {
- RpcException rpcException = (RpcException) t;
- code = rpcException.getCode();
- if (isFlowControl(rpcException)) {
- retStatus = RetStatus.RetFlowControl;
- }
- if (rpcException.isTimeout()) {
- retStatus = RetStatus.RetTimeout;
- }
- if (rpcException.getCause() instanceof CallAbortedException) {
- retStatus = RetStatus.RetReject;
- }
- }
- URL url = invoker.getUrl();
- long delay = System.currentTimeMillis() - startTimeMilli;
- List serviceInfos = DubboUtils.analyzeRemoteDubboServiceInfo(invoker, invocation);
- for (DubboServiceInfo serviceInfo : serviceInfos) {
- polarisOperator.reportInvokeResult(serviceInfo.getService(), serviceInfo.getReportMethodName(), url.getHost(),
- url.getPort(), RpcContext.getServiceContext().getLocalHost(), delay, retStatus, code);
- }
- }
+ @Override
+ public void onError(Throwable t, Invoker> invoker, Invocation invocation) {
+ PolarisOperator polarisOperator = getGovernancePolarisOperator();
+ if (null == polarisOperator) {
+ return;
+ }
+ Long startTimeMilli = (Long) invocation.get(LABEL_START_TIME);
+ RetStatus retStatus = RetStatus.RetFail;
+ int code = -1;
+ if (t instanceof RpcException) {
+ RpcException rpcException = (RpcException) t;
+ code = rpcException.getCode();
+ if (isFlowControl(rpcException)) {
+ retStatus = RetStatus.RetFlowControl;
+ }
+ if (rpcException.isTimeout()) {
+ retStatus = RetStatus.RetTimeout;
+ }
+ if (rpcException.getCause() instanceof CallAbortedException) {
+ retStatus = RetStatus.RetReject;
+ }
+ }
+ URL url = invoker.getUrl();
+ long delay = System.currentTimeMillis() - startTimeMilli;
+ List serviceInfos = DubboUtils.analyzeRemoteDubboServiceInfo(invoker, invocation);
+ DubboServiceInfo dubboServiceInfo = serviceInfos.get(0);
+ polarisOperator.reportInvokeResult(dubboServiceInfo.getService(), dubboServiceInfo.getReportMethodName(), url.getHost(),
+ url.getPort(), RpcContext.getServiceContext().getLocalHost(), delay, retStatus, code);
+ }
- private boolean isFlowControl(RpcException rpcException) {
- boolean a = StringUtils.isNotBlank(rpcException.getMessage()) && rpcException.getMessage()
- .contains(PolarisBlockException.PREFIX);
- boolean b = rpcException.isLimitExceed();
- return a || b;
- }
+ private boolean isFlowControl(RpcException rpcException) {
+ boolean a = StringUtils.isNotBlank(rpcException.getMessage()) && rpcException.getMessage()
+ .contains(PolarisBlockException.PREFIX);
+ boolean b = rpcException.isLimitExceed();
+ return a || b;
+ }
}
diff --git a/polaris-adapter-dubbo/src/main/java/com/tencent/polaris/common/registry/PolarisOperator.java b/polaris-adapter-dubbo/src/main/java/com/tencent/polaris/common/registry/PolarisOperator.java
index 06672da..09fd599 100644
--- a/polaris-adapter-dubbo/src/main/java/com/tencent/polaris/common/registry/PolarisOperator.java
+++ b/polaris-adapter-dubbo/src/main/java/com/tencent/polaris/common/registry/PolarisOperator.java
@@ -20,7 +20,6 @@
import com.tencent.polaris.api.core.ProviderAPI;
import com.tencent.polaris.api.exception.PolarisException;
import com.tencent.polaris.api.listener.ServiceListener;
-import com.tencent.polaris.api.plugin.circuitbreaker.ResourceStat;
import com.tencent.polaris.api.plugin.circuitbreaker.entity.InstanceResource;
import com.tencent.polaris.api.plugin.circuitbreaker.entity.Resource;
import com.tencent.polaris.api.pojo.CircuitBreakerStatus;
@@ -277,13 +276,8 @@ public void reportInvokeResult(String service, String method, String host, int p
serviceCallResult.setRetCode(code);
serviceCallResult.setCallerIp(callerIp);
serviceCallResult.setCallerService(new ServiceKey(polarisConfig.getNamespace(), ""));
-
- InstanceResource resource = new InstanceResource(new ServiceKey(polarisConfig.getNamespace(), service), host, port, null);
- ResourceStat stat = new ResourceStat(resource, code, delay, retStatus);
-
try {
consumerAPI.updateServiceCallResult(serviceCallResult);
- circuitBreakAPI.report(stat);
} catch (PolarisException e) {
DUBBO_LOGGER.error(formatCode(e.getCode()),
e.getMessage(),
diff --git a/polaris-adapter-dubbo/src/main/java/com/tencent/polaris/common/utils/DubboUtils.java b/polaris-adapter-dubbo/src/main/java/com/tencent/polaris/common/utils/DubboUtils.java
index 96dcec2..2f53638 100644
--- a/polaris-adapter-dubbo/src/main/java/com/tencent/polaris/common/utils/DubboUtils.java
+++ b/polaris-adapter-dubbo/src/main/java/com/tencent/polaris/common/utils/DubboUtils.java
@@ -90,9 +90,8 @@ public static List analyzeRemoteDubboServiceInfo(Invoker