Skywalking(5):Rpc调用监控

Skywalking(5):Rpc调用监控,第1张

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接口的开销,这样就能很好的评估出每个环节的耗时时间。

 

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/869241.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-13
下一篇 2022-05-13

发表评论

登录后才能评论

评论列表(0条)

保存