Skywalking(6.5.0) 支持的Rpc框架有以下几种:
- Dubbo 2.5.4 -> 2.6.0
- Dubbox 2.8.4
- Apache Dubbo 2.7.0
- Motan 0.2.x -> 1.1.0
- gRPC 1.x
- Apache ServiceComb Java Chassis 0.1 -> 0.5,1.0.x
- SOFARPC 5.4.0
本节中我们使用Spring Boot和Dubbo搭建一个简单的服务提供方和服务消费方来测试Skywalking对于Rpc调用的支持。可以使用资源文件夹下已经完成打包的 skywalking_dubbo_consumer.jar 和 skywalking_dubbo_provider.jar 来进行测试。
1 服务提供方1.1 POM文件:
4.0.0
org.springframework.boot
spring-boot-starter-parent
2.1.10.RELEASE
com.itcast
skywalking_dubbo_provider
0.0.1-SNAPSHOT
skywalking_dubbo_provider
Demo project for Spring Boot
1.8
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-test
test
com.alibaba.spring.boot
dubbo-spring-boot-starter
2.0.0
org.springframework.boot
spring-boot-maven-plugin
注意:
这里直接使用了 dubbo-spring-boot-starter 这一dubbo与spring-boot集成的组件。
官方文档地址:
https://github.com/alibaba/dubbo-spring-boot-starter/blob/master/README_zh.md
1.2 application.properties
spring.application.name=skywalking_dubbo_provider
spring.dubbo.server=true
spring.dubbo.registry=N/A
server.port=8086
注意:
为了简化环境搭建,采用了本地直接调用的方式,所以将注册中心写成N/A表示不注册到注册中心。
1.3 IHelloService接口:
package com.itcast.api;
public interface IHelloService {
public String hello();
}
注意:
简化项目的开发,将IHelloService接口在消费方和提供方都编写一份。
1.4 HelloServiceImpl实现类:
package com.itcast.skywalking_dubbo_provider.service;
import com.alibaba.dubbo.config.annotation.Service;
import com.itcast.api.IHelloService;
import org.springframework.stereotype.Component;
@Service(interfaceClass = IHelloService.class)
@Component
public class HelloServiceImpl implements IHelloService {
@Override
public String hello() {
return "hello skywalking";
}
}
1.5 SkywalkingDubboProviderApplication启动类:
package com.itcast.skywalking_dubbo_provider;
import com.alibaba.dubbo.spring.boot.annotation.EnableDubboConfiguration;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
//添加dubbo生效注解
@EnableDubboConfiguration
public class SkywalkingDubboProviderApplication {
public static void main(String[] args) {
SpringApplication.run(SkywalkingDubboProviderApplication.class, args);
}
}
需要添加@EnableDubboConfifiguration注解。
2 服务消费方2.1 POM文件
4.0.0
org.springframework.boot
spring-boot-starter-parent
2.1.10.RELEASE
com.itcast
skywalking_dubbo_consumer
0.0.1-SNAPSHOT
skywalking_dubbo_consumer
Demo project for Spring Boot
1.8
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-test
test
com.alibaba.spring.boot
dubbo-spring-boot-starter
2.0.0
org.springframework.boot
spring-boot-maven-plugin
2.2 application.properties:
spring.application.name=skywalking_dubbo_consumer
server.port=8085
2.3 IHelloService接口:
package com.itcast.api;
public interface IHelloService {
public String hello();
}
注意:简化项目的开发,将IHelloService接口在消费方和提供方都编写一份。
2.4 TestController:
package com.itcast.skywalking_dubbo_consumer.controller;
import com.alibaba.dubbo.config.annotation.Reference;
import com.itcast.api.IHelloService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class TestController {
@Reference(url = "dubbo://127.0.0.1:20880")
private IHelloService helloService;
@GetMapping("/hello")
public String hello(){
return helloService.hello();
}
}
2.5 采用直连而非从注册中心获取服务地址的方式,在@Reference注解中声明
url = "dubbo://127.0.0.1:20880"
2.6 SkywalkingDubboConsumerApplication启动类:
package com.itcast.skywalking_dubbo_consumer;
import com.alibaba.dubbo.spring.boot.annotation.EnableDubboConfiguration;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
//添加dubbo生效注解
@EnableDubboConfiguration
public class SkywalkingDubboConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(SkywalkingDubboConsumerApplication.class, args);
}
}
需要添加@EnableDubboConfiguration注解。
3 部署方式1、将 skywalking_dubbo_consumer.jar 和 skywalking_dubbo_provider.jar 上传至 /usr/local/skywalking 目录下。
2、首先我们复制两份agent,防止使用的冲突。
cd /usr/local/skywalking/apache-skywalking-apm-bin/
cp -r agent agent_dubbo_provider
cp -r agent agent_dubbo_consumer
vi agent_dubbo_provider/config/agent.config
修改agent_dubbo_provider配置中的应用名为:
# The service name in UI
agent.service_name=${SW_AGENT_NAME:dubbo_provider}
接着修改agent_dubbo_consumer:
vi agent_dubbo_consumer/config/agent.config
修改应用名:
# The service name in UI
agent.service_name=${SW_AGENT_NAME:dubbo_consumer}
3、先启动provider,等待启动成功。
java -javaagent:/usr/local/skywalking/apache-skywalking-apm-bin/agent_dubbo_provider/skywalking-agent.jar -jar skywalking_dubbo_provider-0.0.1-SNAPSHOT.jar &
4、启动consumer,等待启动成功。
java -javaagent:/usr/local/skywalking/apache-skywalking-apm-bin/agent_dubbo_consumer/skywalking-agent.jar -jar skywalking_dubbo_consumer-0.0.1-SNAPSHOT.jar &
5、调用接口,接口地址为:http://虚拟机IP地址:8085/hello
6、此时如果页面显示
那么dubbo的调用就成功了。
7、打开skywalking查看dubbo调用的监控情况。
仪表盘
目前 dubbo_provider 和 dubbo_consumer 的服务已经出现,同时出现了两个接口分别是:
/hello接口,是浏览器调用dubb_consumer的http接口
com.itcast.api.IHelloService.hello()是dubbo_consumer调用dubbo_provider的dubbo接口
拓扑图:
该图中已经表示出了一个调用的链路关系:
User(浏览器) ----> dubber_consumer ----> dubbo_provider
并且在服务的上方标识出了每个服务代表的内容,dubbo_consumer是SpringMvc的服务,而dubbo_provider是Dubbo的服务。
追踪:
追踪图中显示本次调用耗时49ms,其中dubbo接口耗时29ms,那么另外的20ms其实是SpringMVC接口的开销,这样就能很好的评估出每个环节的耗时时间。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)