新建一个基本的 Spring Boot 工程,命名为
cloud-account。
如果是使用 Spring Initializr 话,引入
Lombok、
Reactive Web、
Reactive MongoDB 和
Eureka Discovery 这四个依赖了解springcloud架构可以加求求:三五三六二四七二五九

最终 pom.xml 中应有以下依赖坐标:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb-reactive</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-webflux</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>io.projectreactor</groupId> <artifactId>reactor-test</artifactId> <scope>test</scope> </dependency>
配置文件 application.yml
spring: application: name: cloud-account server: port: 8100 eureka: client: service-url: defaultZone: http://localhost:8000/eureka/
创建账户的实体类,其中
@AllArgsConstructor
、
@NoArgsConstructor
和
@Data
都是 Lombok 提供注解,不了解的可以自行学习,这里不多说了。
@AllArgsConstructor
@NoArgsConstructor
@Data
@Document(collection = "accounts")
public class Account {
@Id
private String id;
private String customerId;
private Double amount;
}
我们使用 Spring Data Reactive。与非响应式 Spring Data 的
CrudReposity
对应的,响应式的 Spring Data 也提供了相应的 Repository 库:
ReactiveCrudReposity
,我们也可以使用它的子接口
ReactiveMongoRepository
public interface AccountMongoReactiveRepository extends ReactiveCrudRepository<Account, String> {
Flux<Account> findByCustomerId(String customerId);
}
为账户服务创建对应的 Controller,这里只简单提供一个查询客户的所有账户的接口。为了在后面测试负载均衡,这里加上了调用时间戳的打印。
@RequestMapping("/account")
@RestController
public class AccountController {
@Autowired
private AccountMongoReactiveRepository repository;
@GetMapping("/customer/{customer}")
public Flux<Account> findByCustomer(@PathVariable(name = "customer") String customer) {
System.out.println("Customer => " + customer + " [ " + LocalDateTime.now().format(DateTimeFormatter.ofPattern("HH:mm:ss.SSS")) + " ]");
return repository.findByCustomerId(customer);
}
}
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69952307/viewspace-2679179/ ,如需转载,请注明出处,否则将追究法律责任。