Message-Based Microservices
让我们重新实现 hello microservice,这次我们用 event bus 取代 HTTP 服务来接受请求,该 microservice对消息作出响应。
Project Creation
让我们创建一个新的项目,这次我们将加入 Innispan 依赖,一个内存数据系统被用来管理集群:
一旦创建好了,我们可能需要配置 Infinispan 来搭建集群。默认配置使用 广播(multicast)来发现节点。如果你的网络支持广播(multicast),将会很好,另一面,需要检查代码目录resource/cluster。
Writing the Message-Driven Verticle
编辑 src/main/java/io/vertx/book/message/HelloMicroser vice.java 文件和更新 start 方法:
这段代码从 eventbus 注册一个消费者地址 hello,当一个消息接受的时候,它会响应它。根据传入消息是否有空体,我们计算不同的响应。在之前章节的例子中没我们发送一个 JSON 对象。你可能疑惑为什么我们在服务端返回 JSON 格式。很快你将会看到原因,verticle 写好后没,我们将之运行起来:
-cluster 参数告诉 Vert.x 以集群的模式启动。
现在我们写一个 microservice 来消费这个服务。
Initiating Message-Based Interactions
在这节中,我们创建另一个 microservice 来调用 hello microservice ,通过发送消息到 hello 地址并且获取一个回应。microservice 重现实现和之前一样的逻辑,调用两次(once with Luke and once with Leia)
如旧,我们创建一个新的项目:
这里我们将会添加 Vert.x RxJava 支持,获取 RXified APIs 的优势,如果你在前的部门更新了Infinispan 配置,那么你需要复制到新的项目。
现在编辑io.vertx.book.message.HelloConsumerMicroservice,既然我们决定使用 Rxjava,将导入部分改成匹配 io.vertx.rxjava.core.AbstractVerticle,然后重新实现的 start 方法如下:
这段代码换个之前章节的代码很类似,替换调 WebClient 响应 HTTP服务。我们将使用 Event Bus 来发送消息到 hello 地址,提取回复的主体。我们使用ZIP操作检索两个响应并构建最终结果。在 subscibe 方法中,我们将最终结果打印到控制台或打印堆栈跟踪。
让我们把这个与HTTP服务器结合起来。当收到HTTP请求时,我们会调用hello服务两次,并将生成的结果作为响应返回。
最后的代码只是把与 event bus 交互的塞进 requestHandler 和处理 HTTP 响应。在发生故障时,我们返回一个包含错误消息的JSON对象。
如果你运行的方式以 vertx:run -Dvertx.runArgs="-cluster -Djava.net.preferIPv4Stack=true" 启动,你可以在浏览器输入http://localhost:8082,你将可以看到如下:
原文地址:
https://developers.redhat.com/promotions/building-reactive-microservices-in-java/
有什么讨论的内容,可以加我微信公众号: