微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

服务层的异步java方法

如何解决服务层的异步java方法

我正在使用一个名为 PubNub 的库来发布消息。 PubNub 方法异步发布消息,它有办法查看消息是否已发布。

我正在使用 Spring MVC 和 ThymeLeaf,所以我想在获得消息状态(错误或成功)后将响应发送回我的前端,但是,我不知道如何等到我的PubNub 方法完成,然后发送结果。代码如下:

    @Controller
    public class HomeController {
    
        @PostMapping("/triggerDevices")
        public String triggerDevices(@modelattribute(value = "message") Message message,Model model) {
        //
        //
        // validations and build data
        //
        //
         MyResult result = null;
    
         //Async method
                pubNub.publish()
                .message(message)
                .channel(channel)
                .async((result,status) -> {
                 //This block takes some time
                    if (status == null || status.isError()) {
                       //Error case
                       result = new MyResult (false,status.errorMessage(),message.device);
                    } else {
                       //Success case
                       result = new MyResult (true,null,message.device);
                    }
                });
    
            //Result
            model.addAttribute("result",result);
            return "home :: info-success";
       }  
    
    }

希望有人能帮助我,非常感谢。

解决方法

PubNub Java SDK 发布 sync

只需使用 sync 方法而不是 async

PNPublishResult result = pubnub.publish()
                             .channel("coolChannel")
                             .message("test")
                             .shouldStore(true)
                             .ttl(10)
                             .sync();

查看完整的PubNub SDK Java Docs for publish/sync

那应该为您做。 干杯!

,

使用同步很容易解决!但是如果你需要保持异步,我会在你得到结果后在异步函数结果中返回:

//Success case
result = new MyResult (true,null,message.device);
model.addAttribute("result",result);
return "home :: info-success";

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。