gpt4 book ai didi

java - 我应该使用什么消息传递模式来处理和返回来自休息请求的响应?

转载 作者:行者123 更新时间:2023-11-29 04:42:04 25 4
gpt4 key购买 nike

我有一个与此类似的轴辐式架构:

enter image description here

GET 请求进入集线器并将其路由到其中一个分支进行处理。在集线器上,我还将请求放在一个带有 UUID 的映射中,这样当我从处理中取回数据时,我可以返回正确的响应。辐条是相同的,用于平衡负载。然后我需要将信息从 spoke 传回 hub,并返回正确的响应。
我想使用 JMS 进行消息传递。

integration patterns的最佳组合是什么?要做到这一点?

最佳答案

你已经在 Vert.x 中有了请求/回复,所以你可以用大约 20 行代码实现这个行为:

public static void main(String[] args) {

Vertx vertx = Vertx.vertx();

Router router = Router.router(vertx);

router.get("/").handler((request) -> {
// When hub receives request, it dispatches it to one of the Spokes
String requestUUID = UUID.randomUUID().toString();
vertx.eventBus().send("processMessage", requestUUID, (spokeResponse) -> {
if (spokeResponse.succeeded()) {
request.response().end("Request " + requestUUID + ":" + spokeResponse.result().body().toString());
}
// Handle errors
});
});

// We create two Spokes
vertx.deployVerticle(new SpokeVerticle());
vertx.deployVerticle(new SpokeVerticle());

// This is your Hub
vertx.createHttpServer().requestHandler(router::accept).listen(8888);
}

这是 Spoke 的样子:

/**
* Static only for the sake of example
*/
static class SpokeVerticle extends AbstractVerticle {

private String id;

@Override
public void start() {
this.id = UUID.randomUUID().toString();

vertx.eventBus().consumer("processMessage", (request) -> {
// Do something smart

// Reply
request.reply("I'm Spoke " + id + " and my reply is 42");
});
}
}

尝试在浏览器中访问 http://localhost:8888/

您应该看到每次都会生成请求 ID,而两个 Spokes 中只有一个响应您的请求。

关于java - 我应该使用什么消息传递模式来处理和返回来自休息请求的响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38796174/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com