SOFABoot快速开始

  • SOFABoot介绍

    • SOFABoot 是蚂蚁金服开源的基于 Spring Boot 的研发框架,它在 Spring Boot 的基础上,提供了诸如 Readiness Check,类隔离,日志空间隔离等能力。在增强了 Spring Boot 的同时,SOFABoot 提供了让用户可以在 Spring Boot 中非常方便地使用 SOFA 中间件的能力。
  • SOFABoot功能描述

    • 扩展 Spring Boot 健康检查的能力:在 Spring Boot 健康检查能力基础上,提供了 Readiness Check 的能力,保证应用实例安全上线。

    • 提供模块化开发的能力:基于 Spring 上下文隔离提供模块化开发能力,每个 SOFABoot 模块使用独立的 Spring 上下文,避免不同 SOFABoot 模块间的 BeanId 冲突。

    • 增加模块并行加载和 Spring Bean 异步初始化能力,加速应用启动;

    • 增加日志空间隔离的能力:中间件框架自动发现应用的日志实现依赖并独立打印日志,避免中间件和应用日志实现绑定,通过 sofa-common-tools 实现。

    • 增加类隔离的能力:基于 SOFAArk 框架提供类隔离能力,方便使用者解决各种类冲突问题。

    • 增加中间件集成管理的能力:统一管控、提供中间件统一易用的编程接口、每一个 SOFA 中间件都是独立可插拔的组件。

    • 提供完全兼容 Spring Boot的能力:SOFABoot 基于 Spring Boot 的基础上进行构建,并且完全兼容 Spring Boot。

  • 环境准备

    • Java:JDK7或JDK8
    • Maven: 3.2.5及以上
  • 引入SOFABoot

    • 新建一个SprintBoot项目

    • 将pom.xml中的spring-boot-starter-parent替换成sofaboot-dependencies,并添加依赖

          <parent>
      <groupId>com.alipay.sofa</groupId>
      <artifactId>sofaboot-dependencies</artifactId>
      <version>3.2.0</version>
      </parent> <dependency>
      <groupId>com.alipay.sofa</groupId>
      <artifactId>healthcheck-sofa-boot-starter</artifactId>
      </dependency> <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
      </dependency>
    • 修改application.properties文件

      # Application Name
      spring.application.name=SOFABoot Demo
      # logging path
      logging.path=./logs
  • 运行SOFABoot

    success	true
    id 7
    content "SampleRestController"
  • 查看日志

    ./logs
    ├── health-check
    │ ├── sofaboot-common-default.log
    │ └── sofaboot-common-error.log
    ├── infra
    │ ├── common-default.log
    │ └── common-error.log
    └── spring.log
    • 如果应用启动失败或者健康检查返回失败,可以通过相应的日志文件找到错误的原因,有些需要关注 common-error.log 日志
  • SOFATracer

    • 添加SOFATracer依赖
      <dependency>
      <groupId>com.alipay.sofa</groupId>
      <artifactId>tracer-sofa-boot-starter</artifactId>
      </dependency>
    • 修改application.properties文件
        com.alipay.sofa.tracer.zipkin.enabled=true
    com.alipay.sofa.tracer.zipkin.baseUrl=http://localhost:9411
    • 配置Zipkin依赖
        <!-- zipkin依赖 -->
    <dependency>
    <groupId>io.zipkin.zipkin2</groupId>
    <artifactId>zipkin</artifactId>
    <version>2.11.12</version>
    </dependency>
    <dependency>
    <groupId>io.zipkin.reporter2</groupId>
    <artifactId>zipkin-reporter</artifactId>
    <version>2.7.13</version>
    </dependency>
    • 启动Zipkin
    java -jar zipkin-server-2.12.9-exec.jar
    • 访问http://localhost:8080/sofatracer/springmvc

    • 访问http://localhost:9411/zipkin/traces/

    • zipkin控制台截图

      aaarticlea/png;base64,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Ge5KkiRJkiRJkiRJ0gRkuCtJkiRJkiRJkiRJE5DhriRJkiRJkiRJkiRNQIa7kiRJkiRJkiRJkjQBGe5KkiRJkiRJkiRJ0gRkuCtJkiRJkiRJkiRJE5DhriRJkiRJkiRJkiRNQIa7kiRJkiRJkiRJkjQBGe5KkiRJkiRJkiRJ0gRkuCtJkiRJkiRJkiRJE5DhriRJkiRJkiRJkiRNQIa7kiRJkiRJkiRJkjQBGe5KkiRJkiRJkiRJ0gRkuCtJkiRJkiRJkiRJE5DhriRJkiRJkiRJkiRNQIa7kiRJkiRJkiRJkjQBGe5KkiRJkiRJkiRJ0gRkuCtJkiRJkiRJkiRJE5DhriRJkiRJkiRJkiRNQIa7kiRJkiRJkiRJkjQBGe5KkiRJkiRJkiRJ0gRkuCtJkiRJkiRJkiRJE5DhriRJkiRJkiRJkiRNQIa7kiRJkiRJkiRJkjQBGe5KkiRJkiRJkiRJ0gRkuCtJkiRJkiRJkiRJE5DhriRJkiRJkiRJkiRNQIa7kiRJkiRJkiRJkjQBGe5KkiRJkiRJkiRJ0gRkuCtJkiRJkiRJkiRJE5DhriRJkiRJkiRJkiRNQIa7kiRJkiRJkiRJkjQBGe5KkiRJkiRJkiRJ0gRkuCtJkiRJkiRJkiRJE5DhriRJkiRJkiRJkiRNQIa7kiRJkiRJkiRJkjQBGe5KkiRJkiRJkiRJ0gRkuCtJkiRJkiRJkiRJE5DhriRJkiRJkiRJkiRNQIa7kiRJkiRJkiRJkjQBGe5KkiRJkiRJkiRJ0gRkuCtJkiRJkiRJkiRJE5DhriRJkiRJkiRJkiRNQIa7kiRJkiRJkiRJktT6Qvj/A6kTx4JvDRpJAAAAAElFTkSuQmCC" alt="avatar">

SOFABoot&SOFATracer的更多相关文章

  1. 蚂蚁开源的 SOFABoot,和 Spring Boot 有啥关系?

    一.SOFABoot 是什么鬼? 说到 SOFABoot,不得不先说下 SOFARPC 框架,SOFARPC 也是大名远扬,最早起源于阿里淘宝 HSF 框架,现在是蚂蚁金服开源的一款高性能.高可扩展性 ...

  2. 从 <sofa:XXX> 标签开始看 SOFA-Boot 如何融入 Spring

    前言 SOFA-Boot 现阶段支持 XML 的方式在 Spring 中定义 Bean,通过这些标签,我们就能从 Spring 容器中取出 RPC 中的引用,并进行调用,那么他是如何处理这些自定义标签 ...

  3. sofa-boot(1)helloworld项目

    本示例参考:https://www.sofastack.tech/sofa-boot/docs/QuickStart 示例采用sofa-boot 3.1.1版本. 如下步骤: 1.进入https:// ...

  4. 10.源码分析---SOFARPC内置链路追踪SOFATRACER是怎么做的?

    SOFARPC源码解析系列: 1. 源码分析---SOFARPC可扩展的机制SPI 2. 源码分析---SOFARPC客户端服务引用 3. 源码分析---SOFARPC客户端服务调用 4. 源码分析- ...

  5. 蚂蚁SOFA系列(2) - SOFABoot的Readiness健康检查机制

    作者:404,公众号404P,转载请注明出处. 前言 SOFABoot是蚂蚁金服的开源框架,在原有Spring Boot的基础上增强了不少能力,例如Readiness Check,类隔离,日志空间隔离 ...

  6. SofaBoot使用Nacos进行服务注册发现

    前提 最近创业公司的项目组基于业务需要,开发一套新的微服务,考虑到选用的组件必须是主流.社区活跃.生态完善以及方便迁移到云上等因素,引入了SOFAStack全家桶.微服务开发里面,一个很重要的功能就是 ...

  7. [业界方案] 用SOFATracer学习分布式追踪系统Opentracing

    [业界方案] 用SOFATracer学习分布式追踪系统Opentracing 目录 [业界方案] 用SOFATracer学习分布式追踪系统Opentracing 0x00 摘要 0x01 缘由 &am ...

  8. 撸了几天的sofa-tracer之后,我悟了!

    什么是分布式链路跟踪 简而言之,在分布式系统下,用于跟踪链路而衍生出的一项技术. 应用场景如下: 应用A,B,C,D,E 以一个层级关系依赖, 当用户向 应用A 发起请求,但是返回了个异常,为了排查这 ...

  9. sofaBoot

    SOFABoot 和 SOFARPC 都是蚂蚁金服开源的 SOFA 技术栈的开源项目,SOFARPC 只是其 SOFA 技术栈体系(SOFAStack)中的一个 RPC 框架. SOFABoot 也是 ...

随机推荐

  1. MySQL:实现cumsum(累加)的功能

    需求:为实现cumsum累计求和的功能. 一张视图. SELECT 日期, 净利润 FROM daily_pnl_view; 现在希望得到,每天累计的利润是多少. SET @csum := 0;SEL ...

  2. 认真分析mmap:是什么 为什么 怎么用(转)

    阅读目录 mmap基础概念 mmap内存映射原理 mmap和常规文件操作的区别 mmap优点总结 mmap相关函数 mmap使用细节 回到顶部 mmap基础概念 mmap是一种内存映射文件的方法,即将 ...

  3. android ------ AndroidX的 Tablayout(com.google.android.material.tabs.TabLayout) 的使用

    前面呢,有写过TabLayout的博客,最近开发用到了AndroidX来解决前面的问题,不要工具类设置下划线的问题了,来总结一下 Android--------TabLayout实现新闻客户端顶部导航 ...

  4. windows cmd ftp 自动下载

    1.编写ftp的bat脚本: set year=%,% set day=%,%%,%%,% mkdir d:\ftp\%,% mkdir d:\ftp\%,%\%,%%,%%,% del d:\ftp ...

  5. 分布式事务二TCC

    分布式事务解决方案之TCC 4.1.什么是TCC事务 TCC是Try.Confirm.Cancel三个词语的缩写,TCC要求每个分支事务实现三个操作:预处理Try.确认Confirm.撤销Cancel ...

  6. nginx 分离配置文件 conf.d和default.conf

    1. 在 nginx.conf 文件中引用 conf.d 下的所有配置文件 #在http配置节的末尾添加配置引用 http { ... #gzip on; include /etc/nginx/con ...

  7. MongoDB开发深入之三:复制

    复制是基于操作日志oplog,相当于MySQL中的二进制日志,只记录发生改变的记录,复制是将主节点的oplog日志同步并应用到其他从节点的过程. 首先要理解两个概念:1.复制:提供冗余和高可用性:2. ...

  8. python初级(302) 5 列表

    一.复习 1.函数的创建 1) def关键字 2) 函数名及后面跟随的括号 3)冒号加上函数体 2.函数的调用 函数名及后面跟随的括号 3.带一个,二个,三个参数的函数及调用 二.列表 family ...

  9. 记录一次TraceId的问题

    多服务部署的时候,各个服务通过httpClient进行调用时候,有时候出现问题,需要进行追查.但是如果没有一个标记,就会很迷茫,特别是多个服务来回调用,就无法快速定位问题.这个时候一般是使用MDC的 ...

  10. Linux下tar的安装方式

    tar -c: 建立压缩档案-x:解压-t:查看内容-r:向压缩归档文件末尾追加文件-u:更新原压缩包中的文件 这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个.下面的 ...