
提示本文原创作品良心制作干货为主简洁清晰一看就会文章目录前言生产者程序环境准备创建pom.xml创建application.ym创建SentinelWebTestApplication.java创建HelloController.java编译打包消费者程序创建pom.xml创建application.yml创建ConsumerApplication.java创建CallController.java前言本文旨在构建一个 Java 示例应用该应用可自动注册至 Nacos 和 Sentinel既可用于测试 Nacos 的服务自动发现机制也可用于验证 Sentinel 的限流、熔断等流量治理效果生产者程序这个程序可以自动注册到Nacos和Sentinel可以用来测试 Nacos 的服务自动发现机制也可用于验证 Sentinel 的限流、熔断等流量治理效果环境准备# 提前准备java,maven环境rootubuntu:~# java --versionjava 21.0.12 2026-07-21 LTS Java(TM) SE Runtime Environment (build 21.0.127-LTS-205) Java HotSpot(TM) 64-Bit Server VM (build 21.0.127-LTS-205,mixed mode,sharing) rootubuntu:~# mvn -vApache Maven 3.9.16 (2bdd9fddda4b155ebf8000e807eb73fd829a51d5)Maven home:/usr/local/java/mavenJava version:21.0.12,vendor:Oracle Corporation,runtime:/usr/local/javaDefault locale:en_US,platform encoding:UTF-8OS name:linux,version:4.15.0-213-generic,arch:amd64,family:unix# 创建项目存放目录rootubuntu:~# mkdir -p ~/sentinel-test/src/main/java/com/example/sentinel/controller/rootubuntu:~# cd ~/sentinel-test创建pom.xml这个文件定义了项目依赖。我们使用 spring-cloud-starter-alibaba-sentinel它能很好地与 Spring Boot 的 Web 环境集成并自动为 HTTP 接口埋rootubuntu:~/sentinel-test# vim pom.xml?xml version1.0 encodingUTF-8?project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersiongroupIdcom.example/groupIdartifactIdsentinel-web-test/artifactIdversion1.0-SNAPSHOT/versionpackagingjar/packagingparentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion2.6.13/version!--降低到 2.6.x--/parentpropertiesjava.version1.8/java.versionproject.build.sourceEncodingUTF-8/project.build.sourceEncodingspring-cloud.version2021.0.5/spring-cloud.version!--明确 Spring Cloud 版本--spring-cloud-alibaba.version2021.0.5.0/spring-cloud-alibaba.version/propertiesdependencyManagementdependencies!--导入 Spring Cloud BOM统一版本管理--dependency groupIdorg.springframework.cloud/groupId artifactIdspring-cloud-dependencies/artifactId version${spring-cloud.version}/version typepom/type scopeimport/scope /dependency !-- 导入 Spring Cloud Alibaba BOM -- dependency groupIdcom.alibaba.cloud/groupId artifactIdspring-cloud-alibaba-dependencies/artifactId version${spring-cloud-alibaba.version}/version typepom/type scopeimport/scope /dependency/dependencies/dependencyManagementdependencies!--Spring Boot Web--dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-web/artifactId /dependency!--Spring Cloud Starter必须提供 Spring Cloud 基础功能--dependency groupIdorg.springframework.cloud/groupId artifactIdspring-cloud-starter/artifactId /dependency!--Sentinel--dependency groupIdcom.alibaba.cloud/groupId artifactIdspring-cloud-starter-alibaba-sentinel/artifactId /dependency!--Nacos Discovery--dependency groupIdcom.alibaba.cloud/groupId artifactIdspring-cloud-starter-alibaba-nacos-discovery/artifactId /dependency/dependenciesbuildpluginsplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactId/plugin/plugins/build/project创建application.ym创建 application.yml 文件配置应用连接你的 NacosSentinel Dashboardrootubuntu:~/sentinel-test# mkdir src/main/resources/rootubuntu:~/sentinel-test# cat src/main/resources/application.ymlspring:application:name:sentinel-web-testcloud:nacos:discovery:server-addr:192.168.13.140:8848# nacos访问地址sentinel:transport:dashboard:192.168.13.141:8080# sentinel地址与 Dashboard 实际地址一致port:8719# 客户端上报端口默认即可eager:trueserver:port:8080# 该程序启动时占用的本机端口创建SentinelWebTestApplication.java主启动类SentinelWebTestApplication.java这是 Spring Boot 应用的入口rootubuntu:~/sentinel-test# vim src/main/java/com/example/sentinel/SentinelWebTestApplication.javapackage com.example.sentinel; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; SpringBootApplication EnableDiscoveryClient public class SentinelWebTestApplication{public static void main(String[]args){SpringApplication.run(SentinelWebTestApplication.class,args);}}创建HelloController.java这个类定义了可访问的 Web 接口 /hellorootubuntu:~/sentinel-test# vim src/main/java/com/example/sentinel/controller/HelloController.javapackage com.example.sentinel.controller; import com.alibaba.csp.sentinel.annotation.SentinelResource; import com.alibaba.csp.sentinel.slots.block.BlockException; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; RestController public class HelloController{GetMapping(/hello) public String hello(){return Hello,Sentinel!请求通过了!;}}编译打包rootubuntu:~/sentinel-test# mvn clean packagerootubuntu:~/sentinel-test# ls target/classes maven-archiver sentinel-web-test-1.0-SNAPSHOT.jar generated-sources maven-status sentinel-web-test-1.0-SNAPSHOT.jar.original现在我们就有了一个可以直接运行的 JAR 包它提供了 /hello 网页接口能很方便地用来测试 Sentinel 的流量控制功能并且还能注册到Nacos上消费者程序我这里使用了另一台服务器安装消费者程序上面有了一个生产者程序sentinel-web-test它已经注册到 Nacos 并提供了 /hello 接口。我们现在来编写一个消费者程序同样注册到 Nacos并通过服务发现来调用生产者的 /hello 接口验证 Nacos 的服务发现创建pom.xmlrootconsumer:~# mkdir ~/sentinel-test/src/main/java/com/example/consumer/controller -prootconsumer:~# cd sentinel-test/rootconsumer:~/sentinel-test# vim pom.xml?xml version1.0 encodingUTF-8?project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersiongroupIdcom.example/groupIdartifactIdsentinel-consumer/artifactIdversion1.0-SNAPSHOT/versionpackagingjar/packagingparentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion2.6.13/version/parentpropertiesjava.version1.8/java.versionproject.build.sourceEncodingUTF-8/project.build.sourceEncodingspring-cloud.version2021.0.5/spring-cloud.versionspring-cloud-alibaba.version2021.0.5.0/spring-cloud-alibaba.version/propertiesdependencyManagementdependenciesdependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-dependencies/artifactIdversion${spring-cloud.version}/versiontypepom/typescopeimport/scope/dependencydependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-alibaba-dependencies/artifactIdversion${spring-cloud-alibaba.version}/versiontypepom/typescopeimport/scope/dependency/dependencies/dependencyManagementdependencies!--Spring Boot Web--dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-web/artifactId /dependency !-- Spring Cloud Starter基础 -- dependency groupIdorg.springframework.cloud/groupId artifactIdspring-cloud-starter/artifactId /dependency !-- Nacos 服务发现客户端 -- dependency groupIdcom.alibaba.cloud/groupId artifactIdspring-cloud-starter-alibaba-nacos-discovery/artifactId /dependency !-- 用于服务间调用RestTemplate 负载均衡 -- dependency groupIdorg.springframework.cloud/groupId artifactIdspring-cloud-starter-loadbalancer/artifactId /dependency/dependenciesbuildpluginsplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactId/plugin/plugins/build/project创建application.ymlrootconsumer:~/sentinel-test# mkdir src/main/resources/rootconsumer:~/sentinel-test# vim src/main/resources/application.ymlspring:application:name:sentinel-consumer# 服务名需唯一cloud:nacos:discovery:server-addr:192.168.13.140:8848# Nacos 地址server:port:8080# 消费者自己的端口如果与刚才那个程序在同一个设备上则端口需要不同创建ConsumerApplication.javarootconsumer:~/sentinel-test# vim src/main/java/com/example/consumer/ConsumerApplication.javapackage com.example.consumer; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.context.annotation.Bean; import org.springframework.web.client.RestTemplate; SpringBootApplication EnableDiscoveryClient public class ConsumerApplication{public static void main(String[]args){SpringApplication.run(ConsumerApplication.class,args);}Bean org.springframework.cloud.client.loadbalancer.LoadBalanced // 开启负载均衡 public RestTemplate restTemplate(){return new RestTemplate();}}创建CallController.javarootconsumer:~/sentinel-test# vim src/main/java/com/example/consumer/controller/CallController.javapackage com.example.consumer.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate; RestController public class CallController{Autowired private RestTemplate restTemplate; GetMapping(/call) public String callProducer(){// 使用生产者服务名 sentinel-web-test 调用 /hello String url http://sentinel-web-test/hello; return restTemplate.getForObject(url,String.class);}}在浏览器或使用 curl 访问消费者暴露的接口curlhttp://消费者程序ip:8080/call应返回生产者的响应Hello, Sentinel! 请求通过了!注文中若有疏漏欢迎大家指正赐教。本文为100%原创转载请务必标注原创作者尊重劳动成果。求赞、求关注、求评论你的支持是我更新的最大动力评论区等你