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