基于 Java 和 Spring Boot 构建微服务架构:服务注册与发现实战
微服务架构将应用划分为独立服务。本文基于 Java 和 Spring Boot 框架,利用 Spring Cloud Eureka 实现服务的注册、发现与治理。通过配置 Eureka Server 及客户端,结合 Feign 或 RestTemplate 完成服务间调用。文中提供了从项目创建、依赖引入、配置文件编写到代码实现的完整步骤,并包含用户服务与订单服务的实际案例演示,帮助开发者理解微服务通信机制及搭建流程。

微服务架构将应用划分为独立服务。本文基于 Java 和 Spring Boot 框架,利用 Spring Cloud Eureka 实现服务的注册、发现与治理。通过配置 Eureka Server 及客户端,结合 Feign 或 RestTemplate 完成服务间调用。文中提供了从项目创建、依赖引入、配置文件编写到代码实现的完整步骤,并包含用户服务与订单服务的实际案例演示,帮助开发者理解微服务通信机制及搭建流程。

微服务架构是一种将单一应用程序划分为一组小的、独立服务的架构风格。每个微服务负责特定功能,并通过轻量级的协议(如 HTTP REST)进行通信。
在当今快速发展的 Java 开发领域,微服务架构因其灵活性、可扩展性及快速迭代能力而受到广泛关注。
在实战项目中,使用 Spring Boot 来搭建微服务架构,同时利用 Spring Cloud 来处理服务的注册、发现和治理。
当时选择的是 Java8 + Spring Boot 能快速构建微服务,减少配置麻烦,以及使用 Spring Cloud 提供的工具,比如 Eureka、Ribbon、Hystrix 等组件,让服务管理变得简单。
其它的细节这里就不具体展开了,主要围绕本篇文章 Eureka 注册中心进行展开。
在微服务架构中,服务注册与发现是实现服务间通信的基础,下文使用项目中的 Spring Cloud Eureka 来复现这一功能。
application.yml 文件配置@EnableEurekaServer 注解启动 Eureka Serverapplication.yml 文件中配置 Eureka 客户端@EnableEurekaClient 注解启动 Eureka 客户端使用声明式 HTTP 客户端 Feign,来简化 RESTful 服务的调用,使代码更为简洁。
其中一个获取登录账户接口
在完成上述配置后,可以通过启动所有的微服务来测试微服务架构。访问 Eureka Dashboard(本地部署是在 http://localhost:8082)可以看到已注册的服务。
后续可以通过 HTTP 客户端(如 Postman)发送请求来进行测试。
使用两个简单的微服务来实现。一个用户服务和一个订单服务。用户服务将注册到 Eureka 服务器上,而订单服务将通过 Eureka 发现用户服务并进行调用。
application.yml 中添加如下配置:server:
port: 8082
eureka:
client:
register-with-eureka: false
fetch-registry: false
@EnableEurekaServer 注解:@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class, args);
}
}
application.yml 中添加如下配置:server:
port: 8083
spring:
application:
name: user-service
eureka:
client:
service-url:
defaultZone: http://localhost:8082/eureka/
@RestController
@RequestMapping("/users")
public class UserController {
private Map<Long, String> users = new HashMap<>();
@PostMapping
public void createUser(@RequestParam Long id, @RequestParam String name) {
users.put(id, name);
}
@GetMapping("/{id}")
public String getUser(@PathVariable Long id) {
return users.getOrDefault(id, "User not found");
}
}
application.yml 中添加如下配置:server:
port: 8084
spring:
application:
name: order-service
eureka:
client:
service-url:
defaultZone: http://localhost:8082/eureka/
@RestController
@RequestMapping("/orders")
public class OrderController {
@Autowired
private RestTemplate restTemplate;
@PostMapping("/{userId}")
public String createOrder(@PathVariable Long userId) {
String user = restTemplate.getForObject("http://user-service/users/" + userId, String.class);
return "Order created for user: " + user;
}
}
RestTemplate:@SpringBootApplication
@EnableDiscoveryClient
public class OrderServiceApplication {
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
public static void main(String[] args) {
SpringApplication.run(OrderServiceApplication.class, args);
}
}
// 使用 Postman 或 curl 创建用户
POST http://localhost:8083/users?id=1&name=John
// 查询用户
GET http://localhost:8083/users/1
// 创建订单,查询用户信息:
POST http://localhost:8081/orders/1
// 结果 Order created for user: John
打开浏览器,访问 http://localhost:8082,可以看到 user-service 和 order-service 的注册信息。
通过本文的示例,展示了如何使用 Java 和 Spring Boot 框架设计一个微服务架构,并实现服务的注册、发现和调用。
这种架构设计不仅提升了系统的可维护性和可扩展性,还使得团队能够更快速地响应业务需求。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online
JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online
使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online
Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online