Java Akka Actor发起HTTP POST请求无法命中对应路由路径问题
Akka HTTP内部Actor发POST请求未命中路由修复方案
核心问题
你当前的代码存在两个明显错误:
HttpRequest是不可变类,withEntity方法会返回全新的请求实例,你没有接收该返回值,最终构造的带请求体的请求对象直接被丢弃,连正确的请求实例都没有生成。- 仅完成了请求对象的构造,没有调用Akka HTTP提供的请求发送API,请求根本没有实际发出,自然不会命中服务路由。
修复后代码
// Actor内部调用时可通过getContext().getSystem()获取ActorSystem实例 public void postStockCheck(ActorSystem system){ String data = "{\"id\": \"yes\"}"; // 接收withEntity返回的新实例,得到完整的请求对象 HttpRequest postRequest = HttpRequest.POST("http://localhost:8080/hello") .withEntity(HttpEntities.create(ContentTypes.TEXT_PLAIN_UTF8, data)); // 调用Akka HTTP的singleRequest方法实际发送请求 CompletionStage<HttpResponse> responseFuture = Http.get(system).singleRequest(postRequest); // 可选:添加回调监听请求结果,方便后续排查异常 responseFuture.whenComplete((response, error) -> { if (error != null) { System.err.println("请求发送失败:" + error.getMessage()); return; } System.out.println("请求响应状态码:" + response.status()); // 必须消费响应体,避免资源泄漏,不需要内容可直接丢弃 response.discardEntityBytes(system); }); }
补充注意点
如果你的Akka服务绑定的是网卡IP而非localhost,可以把请求地址中的localhost替换为127.0.0.1确认连通性,你Postman可正常访问说明路由配置本身没有问题。
内容的提问来源于stack exchange,提问作者Michelle
相关产品推荐
相关产品推荐

