java 事件订阅_java – 如何使用Spring订阅传入的SSE事件

本文展示了如何在 Spring 中创建一个 REST 控制器,该控制器使用 SseEmitter 发送 server-sent 事件。当尝试从另一个 Spring 应用程序作为客户端订阅这些事件时,遇到了解析事件的问题。问题在于 RestTemplate 不适合处理 SSE 事件,需要使用适当的转换器模块和事件监听机制。文章寻求解决方案来订阅并转换 SSE 事件到自定义对象,如 Greeting 类。
摘要由CSDN通过智能技术生成

我编写了一个

Spring RestController,它返回一个SseEmitter(用于server-sent-event),并为每个事件添加HATEOAS链接.以下是此控制器的简化但有效的示例:

package hello;

import static org.springframework.hateoas.mvc.ControllerLinkBuilder.linkTo;

import static org.springframework.hateoas.mvc.ControllerLinkBuilder.methodOn;

import hello.Greeting.Status;

import java.io.IOException;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestParam;

import org.springframework.web.bind.annotation.RestController;

import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyEmitter;

import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;

@RestController

public class GreetingController {

private static final Logger log = LoggerFactory.getLogger(GreetingController.class);

private static final String template = "Hello, %s!";

class GreetingRequestHandler implements Runnable {

private ResponseBodyEmitter emitter;

private Greeting greeting;

public GreetingRequestHandler(final ResponseBodyEmitter emitter, final Greeting greeting) {

this.emitter = emitter;

this.greeting = greeting;

}

@Override

public void run() {

try {

log.info(this.greeting.toString());

this.emitter.send(this.greeting);

Thread.sleep(5000);

if (Status.COMPLETE.equals(this.greeting.getStatus())

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值