响应式微服务 in java 译 Message-Based Microservices<十>

Message-Based Microservices

让我们重新实现 hello microservice,这次我们用 event bus 取代 HTTP 服务来接受请求,该 microservice对消息作出响应。

Project Creation

让我们创建一个新的项目,这次我们将加入 Innispan 依赖,一个内存数据系统被用来管理集群:

193231_B3EG_2277632.png 

一旦创建好了,我们可能需要配置 Infinispan 来搭建集群。默认配置使用 广播(multicast)来发现节点。如果你的网络支持广播(multicast),将会很好,另一面,需要检查代码目录resource/cluster。

Writing the Message-Driven Verticle

编辑 src/main/java/io/vertx/book/message/HelloMicroser vice.java 文件和更新 start 方法:

193550_tpHM_2277632.png

这段代码从 eventbus 注册一个消费者地址 hello,当一个消息接受的时候,它会响应它。根据传入消息是否有空体,我们计算不同的响应。在之前章节的例子中没我们发送一个 JSON 对象。你可能疑惑为什么我们在服务端返回 JSON 格式。很快你将会看到原因,verticle 写好后没,我们将之运行起来:

194139_NmEF_2277632.png

-cluster 参数告诉 Vert.x 以集群的模式启动。

现在我们写一个 microservice 来消费这个服务。

Initiating Message-Based Interactions

在这节中,我们创建另一个 microservice 来调用 hello microservice ,通过发送消息到 hello 地址并且获取一个回应。microservice 重现实现和之前一样的逻辑,调用两次(once with Luke and once with Leia)

如旧,我们创建一个新的项目:

194635_CEVU_2277632.png

这里我们将会添加 Vert.x RxJava 支持,获取 RXified APIs 的优势,如果你在前的部门更新了Infinispan 配置,那么你需要复制到新的项目。

现在编辑io.vertx.book.message.HelloConsumerMicroservice,既然我们决定使用 Rxjava,将导入部分改成匹配 io.vertx.rxjava.core.AbstractVerticle,然后重新实现的 start 方法如下:

195106_dHZY_2277632.png

这段代码换个之前章节的代码很类似,替换调 WebClient 响应 HTTP服务。我们将使用 Event Bus 来发送消息到 hello 地址,提取回复的主体。我们使用ZIP操作检索两个响应并构建最终结果。在 subscibe 方法中,我们将最终结果打印到控制台或打印堆栈跟踪。

让我们把这个与HTTP服务器结合起来。当收到HTTP请求时,我们会调用hello服务两次,并将生成的结果作为响应返回。

195538_P1oD_2277632.png

最后的代码只是把与 event bus 交互的塞进 requestHandler 和处理 HTTP 响应。在发生故障时,我们返回一个包含错误消息的JSON对象。

如果你运行的方式以 vertx:run -Dvertx.runArgs="-cluster -Djava.net.preferIPv4Stack=true" 启动,你可以在浏览器输入http://localhost:8082,你将可以看到如下:
200107_vDye_2277632.png

200426_Ikjt_2277632.png  

原文地址:

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

110506_9gQF_2277632.png

有什么讨论的内容,可以加我微信公众号:

223108_3TsV_2277632.png

转载于:https://my.oschina.net/u/2277632/blog/1618085

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值