diff --git a/skywalking-sdk-plugin/dubbo-plugin/pom.xml b/skywalking-sdk-plugin/dubbo-plugin/pom.xml
index 934a82846..06c4403a3 100644
--- a/skywalking-sdk-plugin/dubbo-plugin/pom.xml
+++ b/skywalking-sdk-plugin/dubbo-plugin/pom.xml
@@ -16,6 +16,12 @@
UTF-8
+
+
+ Company nexus
+ http://223.202.119.155:18081/nexus/content/groups/public/
+
+
@@ -40,6 +46,48 @@
3.0.0.RELEASE
test
+
+ org.jboss.resteasy
+ resteasy-jaxrs
+ 3.0.7.Final
+ test
+
+
+ org.jboss.resteasy
+ resteasy-client
+ 3.0.7.Final
+ test
+
+
+ javax.validation
+ validation-api
+ 1.0.0.GA
+ test
+
+
+ org.jboss.resteasy
+ resteasy-jackson-provider
+ 3.0.7.Final
+ test
+
+
+ org.apache.tomcat.embed
+ tomcat-embed-core
+ 8.0.11
+ test
+
+
+ org.apache.tomcat.embed
+ tomcat-embed-logging-juli
+ 8.0.11
+ test
+
+
+ javax.ws.rs
+ javax.ws.rs-api
+ 2.0
+ test
+
log4j
log4j
@@ -52,6 +100,17 @@
0.7
test
+
+ com.alibaba
+ dubbox
+ 2.8.3
+
+
+ org.apache.httpcomponents
+ httpclient
+ 4.5.1
+ test
+
com.alibaba
dubbo
diff --git a/skywalking-sdk-plugin/dubbo-plugin/src/main/java/com/ai/cloud/skywalking/plugin/dubbo/SWDubboEnhanceFilter.java b/skywalking-sdk-plugin/dubbo-plugin/src/main/java/com/ai/cloud/skywalking/plugin/dubbo/SWDubboEnhanceFilter.java
index b8f7f0962..ed805da36 100644
--- a/skywalking-sdk-plugin/dubbo-plugin/src/main/java/com/ai/cloud/skywalking/plugin/dubbo/SWDubboEnhanceFilter.java
+++ b/skywalking-sdk-plugin/dubbo-plugin/src/main/java/com/ai/cloud/skywalking/plugin/dubbo/SWDubboEnhanceFilter.java
@@ -5,13 +5,7 @@ import com.ai.cloud.skywalking.buriedpoint.RPCBuriedPointSender;
import com.ai.cloud.skywalking.model.ContextData;
import com.ai.cloud.skywalking.model.Identification;
import com.alibaba.dubbo.common.extension.Activate;
-import com.alibaba.dubbo.rpc.Filter;
-import com.alibaba.dubbo.rpc.Invocation;
-import com.alibaba.dubbo.rpc.Invoker;
-import com.alibaba.dubbo.rpc.Result;
-import com.alibaba.dubbo.rpc.RpcContext;
-import com.alibaba.dubbo.rpc.RpcException;
-import com.alibaba.dubbo.rpc.RpcInvocation;
+import com.alibaba.dubbo.rpc.*;
@Activate
public class SWDubboEnhanceFilter implements Filter {
@@ -22,7 +16,7 @@ public class SWDubboEnhanceFilter implements Filter {
Result result = null;
if (isConsumer) {
RPCBuriedPointSender sender = new RPCBuriedPointSender();
- ContextData contextData = sender.beforeSend(createIdentification(invoker));
+ ContextData contextData = sender.beforeSend(createIdentification(invoker, invocation));
// 追加参数
RpcInvocation rpcInvocation = (RpcInvocation) invocation;
rpcInvocation.setAttachment("contextData", contextData.toString());
@@ -50,7 +44,7 @@ public class SWDubboEnhanceFilter implements Filter {
contextData = new ContextData(contextDataStr);
}
- rpcBuriedPointReceiver.beforeReceived(contextData, createIdentification(invoker));
+ rpcBuriedPointReceiver.beforeReceived(contextData, createIdentification(invoker, invocation));
try {
//执行结果
@@ -71,13 +65,22 @@ public class SWDubboEnhanceFilter implements Filter {
return result;
}
- private static Identification createIdentification(Invoker> invoker) {
- StringBuilder businessKey = new StringBuilder();
- businessKey.append("IP:" + invoker.getUrl().getAddress());
- businessKey.append("Host:" + invoker.getUrl().getHost());
- businessKey.append("Port:" + invoker.getUrl().getPort());
- businessKey.append("Protocol:" + invoker.getUrl().getProtocol());
- return Identification.newBuilder().viewPoint(invoker.getUrl().getServiceInterface()).businessKey(businessKey.
- toString()).spanType('D').build();
+ private static Identification createIdentification(Invoker> invoker, Invocation invocation) {
+ StringBuilder viewPoint = new StringBuilder();
+ viewPoint.append(invoker.getUrl().getProtocol() + "://");
+ viewPoint.append(invoker.getUrl().getHost());
+ viewPoint.append(":" + invoker.getUrl().getPort());
+ viewPoint.append(invoker.getUrl().getAbsolutePath());
+ viewPoint.append(invocation.getMethodName() + "(");
+ for (Class classes : invocation.getParameterTypes()) {
+ viewPoint.append(classes.getSimpleName() + ",");
+ }
+
+ if (invocation.getParameterTypes().length > 0) {
+ viewPoint.delete(viewPoint.length() - 1, viewPoint.length());
+ }
+
+ viewPoint.append(")");
+ return Identification.newBuilder().viewPoint(viewPoint.toString()).spanType('D').build();
}
}
diff --git a/skywalking-sdk-plugin/dubbo-plugin/src/test/java/com/ai/cloud/skywalking/plugin/test/dubbox/rest/consumer/DubboxRestConsumer.java b/skywalking-sdk-plugin/dubbo-plugin/src/test/java/com/ai/cloud/skywalking/plugin/test/dubbox/rest/consumer/DubboxRestConsumer.java
new file mode 100644
index 000000000..73f8bd219
--- /dev/null
+++ b/skywalking-sdk-plugin/dubbo-plugin/src/test/java/com/ai/cloud/skywalking/plugin/test/dubbox/rest/consumer/DubboxRestConsumer.java
@@ -0,0 +1,60 @@
+package com.ai.cloud.skywalking.plugin.test.dubbox.rest.consumer;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.http.HttpEntity;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.entity.ContentType;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.util.HashMap;
+import java.util.Map;
+
+public class DubboxRestConsumer {
+ private static final Log logger = LogFactory.getLog(DubboxRestConsumer.class);
+
+ public static String sendPostRequest(String url, String data, Map header) throws IOException,
+ URISyntaxException {
+ CloseableHttpClient httpclient = HttpClients.createDefault();
+ HttpPost httpPost = new HttpPost(new URL(url).toURI());
+ for (Map.Entry entry : header.entrySet()) {
+ httpPost.setHeader(entry.getKey(), entry.getValue());
+ }
+ StringEntity dataEntity = new StringEntity(data, ContentType.APPLICATION_JSON);
+ httpPost.setEntity(dataEntity);
+ CloseableHttpResponse response = httpclient.execute(httpPost);
+ try {
+ if (response.getStatusLine().getStatusCode() == 200) {
+ HttpEntity entity = response.getEntity();
+ BufferedReader reader = new BufferedReader(new InputStreamReader(
+ entity.getContent()));
+ StringBuffer buffer = new StringBuffer();
+ String tempStr;
+ while ((tempStr = reader.readLine()) != null)
+ buffer.append(tempStr);
+ return buffer.toString();
+ } else {
+ throw new RuntimeException("error code " + response.getStatusLine().getStatusCode()
+ + ":" + response.getStatusLine().getReasonPhrase());
+ }
+ } finally {
+ response.close();
+ httpclient.close();
+ }
+ }
+
+ public static void main(String[] args) throws IOException, URISyntaxException {
+ String url = "http://192.168.1.102:20880/skywalking/rest-a/doBusiness";
+
+ String data = "{\"paramA\":\"BBBB\"}";
+ sendPostRequest(url, data, new HashMap());
+ }
+}
diff --git a/skywalking-sdk-plugin/dubbo-plugin/src/test/java/com/ai/cloud/skywalking/plugin/test/dubbox/rest/impl/DubboxRestInterAImpl.java b/skywalking-sdk-plugin/dubbo-plugin/src/test/java/com/ai/cloud/skywalking/plugin/test/dubbox/rest/impl/DubboxRestInterAImpl.java
new file mode 100644
index 000000000..b5b92ad0a
--- /dev/null
+++ b/skywalking-sdk-plugin/dubbo-plugin/src/test/java/com/ai/cloud/skywalking/plugin/test/dubbox/rest/impl/DubboxRestInterAImpl.java
@@ -0,0 +1,12 @@
+package com.ai.cloud.skywalking.plugin.test.dubbox.rest.impl;
+
+import com.ai.cloud.skywalking.plugin.test.dubbox.rest.interfaces.IDubboxRestInterA;
+import com.alibaba.dubbo.config.annotation.Service;
+
+@Service
+public class DubboxRestInterAImpl implements IDubboxRestInterA {
+ public String doBusiness(String paramA) {
+ System.out.println("param : " + paramA);
+ return "{\"content\":\"" + paramA + "\"}";
+ }
+}
diff --git a/skywalking-sdk-plugin/dubbo-plugin/src/test/java/com/ai/cloud/skywalking/plugin/test/dubbox/rest/impl/DubboxRestStart.java b/skywalking-sdk-plugin/dubbo-plugin/src/test/java/com/ai/cloud/skywalking/plugin/test/dubbox/rest/impl/DubboxRestStart.java
new file mode 100644
index 000000000..ebe03e616
--- /dev/null
+++ b/skywalking-sdk-plugin/dubbo-plugin/src/test/java/com/ai/cloud/skywalking/plugin/test/dubbox/rest/impl/DubboxRestStart.java
@@ -0,0 +1,17 @@
+package com.ai.cloud.skywalking.plugin.test.dubbox.rest.impl;
+
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+
+public class DubboxRestStart {
+
+ public static void main(String[] args) throws InterruptedException {
+ ClassPathXmlApplicationContext classPathXmlApplicationContext = new
+ ClassPathXmlApplicationContext("classpath*:provider/dubbox-provider.xml");
+
+ classPathXmlApplicationContext.start();
+
+ while (true) {
+ Thread.sleep(100000L);
+ }
+ }
+}
diff --git a/skywalking-sdk-plugin/dubbo-plugin/src/test/java/com/ai/cloud/skywalking/plugin/test/dubbox/rest/interfaces/IDubboxRestInterA.java b/skywalking-sdk-plugin/dubbo-plugin/src/test/java/com/ai/cloud/skywalking/plugin/test/dubbox/rest/interfaces/IDubboxRestInterA.java
new file mode 100644
index 000000000..8e63920e8
--- /dev/null
+++ b/skywalking-sdk-plugin/dubbo-plugin/src/test/java/com/ai/cloud/skywalking/plugin/test/dubbox/rest/interfaces/IDubboxRestInterA.java
@@ -0,0 +1,17 @@
+package com.ai.cloud.skywalking.plugin.test.dubbox.rest.interfaces;
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
+
+@Path("/rest-a")
+@Consumes({MediaType.APPLICATION_JSON})
+@Produces({MediaType.APPLICATION_JSON, MediaType.TEXT_XML})
+public interface IDubboxRestInterA {
+
+ @Path("/doBusiness")
+ @POST
+ String doBusiness(String paramA);
+}
diff --git a/skywalking-sdk-plugin/dubbo-plugin/src/test/resources/provider/dubbox-provider.xml b/skywalking-sdk-plugin/dubbo-plugin/src/test/resources/provider/dubbox-provider.xml
new file mode 100644
index 000000000..570b4671c
--- /dev/null
+++ b/skywalking-sdk-plugin/dubbo-plugin/src/test/resources/provider/dubbox-provider.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file