如何解决@Scheduled和websocket,消息未到达Angular客户
我无法使用@Scheduled任务向客户端发送Websocket消息。我在下面添加了代码。我会每分钟检查我是否有应自动启动的作业,如果有,我将启动它们并发送websocket消息,以便客户端知道作业已开始。
现在,除了websocket部分,其他所有东西都可以正常工作。客户端只是没有收到消息,但是我知道它是有效的,因为我也在其他地方也使用了相同的updateLogisticClients
方法,并且它在100%的时间内都有效。
我认为这是因为@Scheduled,因为它适用于常规方法...有什么想法吗?
@Transactional
@Scheduled(cron = "0 * * * * *")
public List<DayJob> startRentJobsAutomatically() {
List<DayJob> dayJobsToStart = getRentJobsToStart();
for (DayJob dayJob : dayJobsToStart) {
dayJob.setActualStartTime(dayJob.getStartTime());
dayJob.setStatus(DayJob.DayJobStatus.in_progress);
DayJobDetailResponse response = new DayJobDetailResponse(dayJobRepository.save(dayJob));
updateLogisticClients(response);
}
return dayJobsToStart;
}
@SendTo("/logistic-data/day")
public void updateLogisticClients(DayJobDetailResponse response) {
System.out.println("SENT");
webSocket.convertAndSend("/logistic-data/day/" + CompanyContext.getCurrentCompanyId(),response);
}
解决方法
仅从预定的端口调用Web套接字端点不会为您触发它。使用单独的预定组件,例如:
@Component
public class ScheduledUpdatesOnTopic{
@Autowired
private SimpMessagingTemplate template;
@Scheduled(fixedDelay=300)
public void publishUpdates(){
List<DayJob> dayJobsToStart = getRentJobsToStart();
for (DayJob dayJob : dayJobsToStart) {
dayJob.setActualStartTime(dayJob.getStartTime());
dayJob.setStatus(DayJob.DayJobStatus.in_progress);
DayJobDetailResponse response = new DayJobDetailResponse(dayJobRepository.save(dayJ
template.convertAndSend("/logistic-data/day",response);
}
}
,
结果CompanyContext.getCurrentCompanyId()
返回null
,并且客户端根据用户侦听特定的公司I。我在通过companyId访问的数据库中有单独的公司数据,如果这是@Scheduled任务,则未设置companyId:)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。