如何在Ubuntu上构建Java微服务架构
导读:在 Ubuntu 上构建 Java 微服务架构 一 环境准备与基础工具 系统建议:Ubuntu 20.04/22.04 LTS 安装基础工具与运行时: 更新索引并安装 OpenJDK 11/17、Maven、Docker(可选:Dock...
在 Ubuntu 上构建 Java 微服务架构
一 环境准备与基础工具
- 系统建议:Ubuntu 20.04/22.04 LTS
- 安装基础工具与运行时:
- 更新索引并安装 OpenJDK 11/17、Maven、Docker(可选:Docker Compose)
- 命令示例:
- sudo apt update & & sudo apt install -y openjdk-17-jdk maven docker.io
- 如需编排多容器:sudo apt install -y docker-compose
- 验证安装:
- java -version(应显示 17 或 11)
- mvn -v(应显示 3.8+)
- docker --version、docker-compose --version
- 可选:配置 JAVA_HOME(以实际路径为准,示例为 OpenJDK 17)
- echo ‘export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64’ > > /etc/profile
- source /etc/profile
- 说明:Spring Boot/Spring Cloud 开发常用 JDK 11+ 与 Maven 3.8+,容器化部署建议配合 Docker 使用。
二 架构选型与最小组件
- 核心组件建议:
- 服务注册与发现:Eureka(入门简单,适合单机/演示;生产可演进至 Consul/Nacos 等)
- 配置中心:Spring Cloud Config Server(集中管理多环境配置)
- API 网关:Spring Cloud Gateway(路由、过滤、负载均衡)
- 服务间调用:OpenFeign(声明式客户端,配合负载均衡)
- 运行时与打包:Spring Boot 3.x + Spring Cloud(Java 17+),或选择云原生框架 Quarkus/Micronaut/Helidon(启动快、内存占用低,适合容器与 K8s)
- 适用场景与取舍:
- 追求生态与开发效率:优先 Spring Boot + Spring Cloud
- 追求极致启动时间与云原生:优先 Quarkus/Micronaut/Helidon
- 高并发与响应式编程:Vert.x
- 参考最小拓扑:
- Eureka Server(注册中心,端口 8761)
- Config Server(配置中心,端口 8888)
- API Gateway(网关,端口 8080)
- 业务服务 A/B(示例:用户、订单,端口 8081/8082)。
三 快速落地步骤 Spring Boot + Eureka + Feign + Gateway
- 步骤 1 初始化工程与依赖
- 使用 Spring Initializr 创建三个项目:eureka-server、config-server、gateway;业务服务 user-service、order-service
- 关键依赖(示例为 Maven):
- Eureka Server:spring-cloud-starter-netflix-eureka-server
- Eureka Client:spring-cloud-starter-netflix-eureka-client
- Config Client:spring-cloud-starter-config
- Gateway:spring-cloud-starter-gateway
- OpenFeign:spring-cloud-starter-openfeign
- 步骤 2 配置服务注册中心 Eureka
- application.yml(eureka-server):
- server.port: 8761
- eureka.client.registerWithEureka: false
- eureka.client.fetchRegistry: false
- 主类注解:@SpringBootApplication + @EnableEurekaServer
- application.yml(eureka-server):
- 步骤 3 配置业务服务(注册到 Eureka)
- bootstrap.yml(指明配置中心与名称,示例 user-service):
- spring.application.name: user-service
- spring.cloud.config.uri: http://localhost:8888
- application.yml(示例片段):
- server.port: 8081
- eureka.client.serviceUrl.defaultZone: http://localhost:8761/eureka/
- 主类:@SpringBootApplication + @EnableEurekaClient
- 控制器示例:
- @RestController @RequestMapping(“/api/v1/users”)
- public String hello() { return “Hello from user-service”; }
- @RestController @RequestMapping(“/api/v1/users”)
- bootstrap.yml(指明配置中心与名称,示例 user-service):
- 步骤 4 配置 API 网关
- application.yml(gateway):
- server.port: 8080
- spring.cloud.gateway.routes:
- id: user-service uri: lb://USER-SERVICE predicates: Path=/users/**
- id: order-service uri: lb://ORDER-SERVICE predicates: Path=/orders/**
- eureka.client.serviceUrl.defaultZone: http://localhost:8761/eureka/
- 主类:@SpringBootApplication
- application.yml(gateway):
- 步骤 5 服务间调用(Feign)
- 在 consumer 模块添加依赖:spring-cloud-starter-openfeign
- 启用:@EnableFeignClients
- 声明客户端:
- @FeignClient(“user-service”)
- public interface UserClient {
- @GetMapping(“/api/v1/users/hello”)
- String hello();
- }
- public interface UserClient {
- @FeignClient(“user-service”)
- 在控制器中注入并调用 UserClient#hello()
- 步骤 6 启动顺序
- Eureka Server → Config Server → Gateway → 业务服务
- 验证:
- Eureka 控制台:http://localhost:8761
- 网关路由:http://localhost:8080/users/hello(应转发到 user-service)
四 容器化与多服务编排
- 构建镜像(每个服务)
- 示例 Dockerfile(基于 openjdk:17):
- FROM openjdk:17-jdk-slim
- WORKDIR /app
- COPY target/*.jar app.jar
- EXPOSE 8080
- ENTRYPOINT [“java”,“-jar”,“/app/app.jar”]
- 构建与运行:
- mvn clean package
- docker build -t user-service:latest .
- docker run -d -p 8081:8080 --name user-service user-service:latest
- 示例 Dockerfile(基于 openjdk:17):
- 使用 Docker Compose 编排(示例 docker-compose.yml)
- version: ‘3.8’
- services:
- eureka:
- image: eureka-server:latest
- ports: [“8761:8761”]
- config:
- image: config-server:latest
- ports: [“8888:8888”]
- depends_on: [“eureka”]
- gateway:
- image: gateway:latest
- ports: [“8080:8080”]
- depends_on: [“eureka”,“config”]
- user-service:
- image: user-service:latest
- depends_on: [“eureka”,“config”]
- order-service:
- image: order-service:latest
- depends_on: [“eureka”,“config”]
- eureka:
- 启动:docker-compose up -d
- 说明:Compose 适合本地开发与演示;生产建议使用 Kubernetes 进行编排、滚动升级与健康检查。
五 生产就绪与扩展建议
- 配置与安全
- 使用 Spring Cloud Config Server 管理多环境配置;敏感信息放入 Vault 或使用 K8s Secret
- 开启 HTTPS、设置 JWT/OAuth2、启用 Rate Limiting 与 CORS 策略
- 可观测性
- 日志:结构化日志(JSON),集中到 ELK/Loki
- 指标与链路追踪:Micrometer + Prometheus/Grafana、Sleuth/Zipkin
- 弹性与容错
- 在网关与服务侧引入 Resilience4j(熔断、重试、超时)
- 数据库读写分离、缓存(如 Redis)、异步(如 RabbitMQ/Kafka)
- 部署与发布
- 镜像仓库:Harbor 或云厂商仓库;CI/CD:GitHub Actions/GitLab CI
- 蓝绿/金丝雀发布;健康检查与自动回滚
- 框架演进
- 若需更快启动与更低内存,可将部分服务迁移至 Quarkus/Micronaut/Helidon,并基于 GraalVM 构建原生镜像以适配容器与 Serverless 场景。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: 如何在Ubuntu上构建Java微服务架构
本文地址: https://pptw.com/jishu/764060.html
