对客户的春季工作回应

时间:2017-06-16 07:59:50

标签: spring-mvc spring-boot javafx-8 spring-batch

Spring批处理作业成功完成,代码如下:

@RestController
@RequestMapping(value = "api/jobs")
public class JobLaunchingController {
    @Autowired
    private JobOperator jobOperator;

    @RequestMapping(value = "/pay/{paymentPeriod}", method = RequestMethod.POST)
    @ResponseStatus(HttpStatus.ACCEPTED)
    public void launchPaymentJob(@PathVariable Integer paymentPeriod) throws Exception {
        this.jobOperator.start("paymentJob", String.format("paymentPeriod=%s,time=" + System.currentTimeMillis(), paymentPeriod));
    }
}

我正在使用JavaFX客户端,其中端点用于发送要启动的作业的请求。基本上,在泽西客户端的帮助下,http请求就像这样发送

Client client = ClientBuilder.newBuilder().build();
WebTarget webTarget = client.target(getBaseUri()).path(path);
Response response = webTarget.request().get(Response.class);

问题是我无法让客户知道作业何时完成。如何在作业完成后通过服务器通知客户端

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

这更像是一个建筑问题,而不是编码。你可以通过多种方式解决这个问题,我建议你三个以下

  1. 最简单 - >如果你的工作不需要很长时间 - 让你的客户等待工作的结果。发回最终状态作为回应。
  2. 立即向客户发送工作参考编号,并引入另一个端点,如果工作完成,客户可以使用参考编号进行检查 - 这涉及您的客户有一些轮询机制。
  3. 使用服务器发送事件/ Websockets等内容 - 感谢cerp0

答案 1 :(得分:0)

  

如何在作业完成后通过服务器通知客户端?

尝试使用Websokets将数据从服务器发送到客户端。 Here是一个非常好的指南,如何使用Spring。

在客户端,我相信您可以使用此方法:https://github.com/nickebbutt/stomp-websockets-java-client