Java Spring Cloud 與響應式微服務(三)客戶服務建立
新建一個基本的 Spring Boot 工程,命名為
cloud-customer
,POM 依賴和之前的
cloud-account
的一模一樣。瞭解springcloud架構可以加求求:三五三六二四七二五九
配置檔案如下,僅是改了服務名和埠號:
spring: application: name: cloud-customer server: port: 8200 eureka: client: service-url: defaultZone:
建立一個 Customer 的實體類
@Data @AllArgsConstructor @NoArgsConstructor @Document(collection = "customers") public class Customer { @Id private String id; private String name; private String mobile; }
資料訪問層直接繼承
ReactiveCrudRepository
我們便有了基本的 CRUD 能力
public interface CustomerMongoReactiveRepository extends ReactiveCrudRepository<Customer, String> { }
因為我們只是示例,不做複雜的業務邏輯,所以省略了 Service 層,在 Controller 裡邊直接將 CRUD 的操作代理給了 Repository。
@RestController @RequestMapping("/customer") public class CustomerController { @Autowired private CustomerMongoReactiveRepository repository; @Autowired private WebClient.Builder webClientBuilder; @GetMapping("") public Flux<Customer> list() { return repository.findAll(); } @GetMapping("/{id}") public Mono<Customer> get(@PathVariable String id) { return repository.findById(id); } @PostMapping("") public Mono<Customer> create(@RequestBody Customer customer) { return repository.save(customer); } @PutMapping("/{id}") public Mono<Customer> update(@PathVariable("id") String id, @RequestBody Customer customer) { customer.setId(id); return repository.save(customer); } @DeleteMapping("/{id}") public Mono<Void> delete(@PathVariable String id) { return repository.deleteById(id); } }
到這裡,我們的服務註冊中心和兩個微服務就都好了。但是,這兩個微服務之間還是完全獨立的,沒有相互間的服務呼叫。現在我們來實現之前說的需求:客戶服務與帳戶服務可以相互通訊,以獲取客戶的所有帳戶,並透過客戶服務 API 方法返回。
首先建立一個 Java Config,這裡我們不再使用
RestTemplate
來呼叫服務,而是
WebClient
。這個配置看起來和註冊
RestTemplate
時差不多,但是要注意這裡註冊的 Bean 是
WebClient.Builder
。
@Configuration public class WebClientConfig { @Bean @LoadBalanced public WebClient.Builder loadBalancedWebClientBuilder() { return WebClient.builder(); } }
除了這種寫法,還有一種寫法是
public class MyClass { @Autowired private LoadBalancerExchangeFilterFunction lbFunction; public Mono<String> doOtherStuff() { return WebClient.builder().baseUrl(") .filter(lbFunction) .build() .get() .uri("") .retrieve() .bodyToMono(String.class); } }
下邊的是錯誤的寫法,會丟擲異常
@Bean @LoadBalanced public WebClient loadBalancedWebClient() { return WebClient.builder().baseUrl(").build(); }
然後在
CustomerController
實現這個端點:
@GetMapping("/{id}/account") public Flux<Account> getAllAccounts(@PathVariable String id) { return webClientBuilder.baseUrl(").build() .get().uri("/customer/" + id) .retrieve() .bodyToFlux(Account.class); }
這裡需要在
cloud-customer
裡建立一個 DTO
Account
,因為和
cloud-account
裡的完全一樣,就省略了。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69952307/viewspace-2679180/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Java Spring Cloud 與響應式微服務(二)賬戶服務建立JavaSpringCloud微服務
- Java Spring Cloud 與響應式微服務(一)服務註冊中心JavaSpringCloud微服務
- spring cloud微服務分散式雲架構(一)-spring cloud 服務註冊與發現SpringCloud微服務分散式架構
- spring cloud微服務分散式雲架構(三)-服務消費者(Feign)SpringCloud微服務分散式架構
- 學習Spring Cloud與微服務之路三SpringCloud微服務
- 微服務整合Spring Cloud Alibaba Seata (二) 客戶端連線微服務SpringCloud客戶端
- spring cloud微服務分散式雲架構--服務註冊(consul)SpringCloud微服務分散式架構
- Spring Cloud構建微服務架構-spring cloud服務監控中心SpringCloud微服務架構
- (三)spring cloud微服務分散式雲架構-服務閘道器zuul初級篇SpringCloud微服務分散式架構Zuul
- spring cloud微服務分散式雲架構-服務消費者FeignSpringCloud微服務分散式架構
- 初識Spring Cloud Eureka(三)(Eureka客戶端之間 服務的相互呼叫)SpringCloud客戶端
- (十四)spring cloud微服務分散式雲架構-服務註冊與發現(Eureka、Consul)SpringCloud微服務分散式架構
- spring cloud微服務分散式雲架構Spring Cloud ZuulSpringCloud微服務分散式架構Zuul
- spring cloud微服務分散式雲架構-Spring Cloud NetflixSpringCloud微服務分散式架構
- spring cloud微服務分散式雲架構-Spring Cloud BusSpringCloud微服務分散式架構
- 部署Azure Spring Cloud微服務應用SpringCloud微服務
- (三)spring cloud微服務分散式雲架構 - Spring Cloud整合專案簡介SpringCloud微服務分散式架構
- Java架構-(一)spring cloud微服務分散式雲架構 - Spring Cloud簡介Java架構SpringCloud微服務分散式
- java版電子商務spring cloud分散式微服務-大話Spring CloudJavaSpringCloud分散式微服務
- 微服務整合Spring Cloud Alibaba Seata(一)Seata服務搭建微服務SpringCloud
- spring cloud微服務分散式雲架構 - Spring Cloud簡介SpringCloud微服務分散式架構
- 使用Java和Spring WebFlux構建響應式微服務JavaSpringWebUX微服務
- (十五)spring cloud微服務分散式雲架構-commonservice-config配置服務搭建SpringCloud微服務分散式架構
- spring cloud微服務分散式雲架構-服務閘道器過濾器SpringCloud微服務分散式架構過濾器
- Java後端微服務架構下的服務依賴注入:Spring Cloud ContextJava後端微服務架構依賴注入SpringCloudContext
- Spring Cloud Feign 宣告式服務呼叫SpringCloud
- 宣告式服務呼叫 Spring Cloud FeignSpringCloud
- spring cloud分散式微服務:Spring Cloud ConfigSpringCloud分散式微服務
- spring cloud 和 阿里微服務spring cloud AlibabaSpringCloud阿里微服務
- 基於Spring Cloud微服務叢集的服務治理思考SpringCloud微服務
- Spring Cloud構建微服務架構-服務閘道器SpringCloud微服務架構
- Spring Cloud構建微服務架構-Hystrix服務降級SpringCloud微服務架構
- (一)spring cloud微服務分散式雲架構 - Spring Cloud簡介SpringCloud微服務分散式架構
- (一)spring cloud微服務分散式雲架構-Spring Cloud簡介SpringCloud微服務分散式架構
- spring cloud微服務分散式雲架構(二)-服務消費者(rest+ribbon)SpringCloud微服務分散式架構REST
- (七)spring cloud微服務分散式雲架構-服務消費者(rest+ribbon)SpringCloud微服務分散式架構REST
- spring cloud 微服務實戰SpringCloud微服務
- java版b2b2c社交電商spring cloud分散式微服務-服務提供與呼叫JavaSpringCloud分散式微服務