Java Spring Cloud 與響應式微服務(二)賬戶服務建立

gung123發表於2020-03-09

賬戶服務

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

如果是使用 Spring Initializr 話,引入  LombokReactive WebReactive 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: 

建立賬戶的實體類,其中  @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部落格 ” ,連結:http://blog.itpub.net/69952307/viewspace-2679179/,如需轉載,請註明出處,否則將追究法律責任。

相關文章