响应式微服务 in java 译<八>

Consuming HTTP Microservices

一个微服务不能构成一个应用;你须要一个微服务的系统,如今咱们已经把咱们第一个微服务应用跑起来了,开始写第一个微服务来消费他。第二个微服务也提供了HTTP调用,这一节中的代码在(microservices/hello- consumer-microservice-http directory of the code repository)。java

Project Creation

一如既往,咱们建立一个新的项目:react

最后的命令增长另外一个依赖:Vert.x web client(异步的HTTP客户端),咱们能够用这个 client 调用第一个微服务。这个命令也会在后续的 Vert.x RxJava 绑定中用到。web

如今咱们编辑src/main/java/io/vertx/book/http/HelloConsumerMicroservice.java 文件,增长如下内容:编程

在 start 方法中,咱们建立了 WebClient 和 Router,在建立的 Router 中,咱们注册了“/”路径和启动HTTP 服务,传递这个 router 到 requestHandler 处理方法。route 处理程序的方法引打到“hello”,这个方法使用 web client 调用第一个微服务(/vert.x),而后把结果写到 HTTP response 中。微信

一旦 HTTP 请求被建立,咱们称作发送了一个请求,该处理程序经过调用,响应到达或发生错误。if-else块检查是否调用成功,别忘了,这是一个远程互动,有不少理由失败。例如,第一个微服服务没有运行,当它成功时,咱们把接收的 payload 的响应,不然,咱们返回 500 错误。并发

Calling the Service More Than Once异步

如今咱们改变如今调用微服务的方法,使用不一样的参数调用两次。maven

这两个请求是独立的,能够并发执行。但在这里咱们要写一个响应装配结果,代码须要调用服务两次,组装两结果是复杂的,由于当接受到一个请求完成的时候,咱们须要验证另外一个请求是否完成。而这个代码仍然要控制两个请求,它变得过于复杂时,咱们须要处理更多。幸运的是,在前面的章节中提到的,咱们可使用响应式编程,用RxJava简化代码。函数

咱们用 vertx-maven-plugin 引入 Vert.x RxJava API。在 HelloConsumerMicroservice 中,咱们替换下面的引入:微服务

使用RX,复杂的代码调用两个请求整合他们的结果,这个变得简单:

注意到 rxSend 方法调用,Vert.x 中的 Rxjava方法都是以  rx 前缀,方便辨识。rxSend 结果是简单的,一个观察者表明一个操做的可延期结果,single.zip 带入一组 Single,一旦全部的人都接受了其中的值,调用结果的函数。single.zip产生包含另外一个函数的结果,最后,咱们订阅。 这个方法有两个函数做为参数:

    1.第一个是调用 zip 方法的结果(Json 对象)。咱们把接受到的  JSON payload 写入HTTP response。

    2.若是何时失败了,第二个方法调用(超时,异常等),在这个例子中,咱们相应一个空的 JSON 对象。

代码修改后,咱们打开 http://localhost:8081 ,hello microservice 运行后,咱们能够看到:

 

原文地址:

https://developers.redhat.com/promotions/building-reactive-microservices-in-java/

有什么讨论的内容,能够发我微信公众号:

相关文章
相关标签/搜索