ITPub博客

首页 > 架构设计 > 基础设施 > Java Spring Cloud 与响应式微服务(二)账户服务创建

Java Spring Cloud 与响应式微服务(二)账户服务创建

原创 基础设施 作者:gung123 时间:2020-03-09 14:17:05 0 删除 编辑

账户服务

新建一个基本的 Spring Boot 工程,命名为  cloud-account。

如果是使用 Spring Initializr 话,引入  Lombok、 Reactive Web、 Reactive MongoDB 和  Eureka Discovery 这四个依赖了解springcloud架构可以加求求:三五三六二四七二五九

image-20180426164755015

最终 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/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-11-01

  • 博文量
    200
  • 访问量
    79619