Skywalking之agent与oap的GRPC通信

介绍

我们希望客户端能够主动与oap端通信拿到服务端的配置数据然后执行对应的客户端的业务逻辑。
那么本文挑选的Profile的case恰好是符合这样的要求的。下面不妨展开研究一下

实现介绍

撰写grpc契约

Profile.proto文件中,代码如下:(主要看一下getProfileTaskCommands接口)

/*
 * 篇幅限制,license声明的注释略去
 */
syntax = "proto3";

option java_multiple_files = true;
option java_package = "org.apache.skywalking.apm.network.language.profile.v3";
option csharp_namespace = "SkyWalking.NetworkProtocol.V3";
option go_package = "skywalking/network/language/profile/v3";

import "common/Common.proto";

service ProfileTask {
   

    // query all sniffer need to execute profile task commands
    rpc getProfileTaskCommands (ProfileTaskCommandQuery) returns (Commands) {
   
    }

    // collect dumped thread snapshot
    rpc collectSnapshot (stream ThreadSnapshot) returns (Commands) {
   
    }

    // report profiling task finished
    rpc reportTaskFinish (ProfileTaskFinishReport) returns (Commands) {
   
    }

}

message ProfileTaskCommandQuery {
   
    // current sniffer information
    string service = 1;
    string serviceInstance = 2;

    // last command timestamp
    int64 lastCommandTime = 3;
}

// dumped thread snapshot
message ThreadSnapshot {
   
    // profile task id
    string taskId = 1;
    // dumped segment id
    string traceSegmentId = 2;
    // dump timestamp
    int64 time = 3;
    // snapshot dump sequence, start with zero
    int32 sequence = 4;
    // snapshot stack
    ThreadStack stack = 5;
}

message ThreadStack {
   
    // stack code signature list
    repeated string codeSignatures = 1;
}

// profile task finished report
message ProfileTaskFinishReport {
   
    // current sniffer information
    string service = 1;
    string serviceInstance = 2;

    // profile task
    string taskId = 3;
}

实现业务逻辑

注册服务

在ProfileModuleProvider类中注册,前提是必须extends ModuleProvider

/**
 * profile task receiver default provider
 */·
public class ProfileModuleProvider extends ModuleProvider {
   
    @Override
    public String name() {
   
        return "default";
    }

    @Override
    public Class<? extends ModuleDefine> module() {
   
        return ProfileModule.class;
    }

    @Override
    public ModuleConfig createConfigBeanIfAbsent() {
   
        return null;
    }

    
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值