如何使用 http 侦听器和 jersey 在 Mule 3.9.0 中实现 SSE

How to implement SSE in Mule 3.9.0 using http listener and jersey

是否可以使用 mule (3.9.0) 和 jersey 实现服务器发送事件 (SSE)?似乎 mule http 侦听器立即关闭了连接。有没有办法让骡子保持插座打开?

我已经实现了配置:

<http:listener-config name="HttpListenerConfig" host="0.0.0.0" basePath="/myservice" port="8090" />

<flow name="NotificationServiceFlow">
        <http:listener config-ref="HttpListenerConfig" path="/sse/*" allowedMethods="GET" parseRequest="false" responseStreamingMode="ALWAYS">
        </http:listener>
        <jersey:resources>
            <component>
                <spring-object bean="NotificationResource"/>
            </component>
        </jersey:resources>
    </flow>

球衣资源如下:

@Path("/notifications")
public class NotificationResource {
    
    private SseBroadcaster broadcaster = new SseBroadcaster();
    
    @GET
    @Produces(SseFeature.SERVER_SENT_EVENTS)
    public EventOutput subscribe() {
        final EventOutput eventOutput = new EventOutput();
        broadcaster.add(eventOutput);
        return eventOutput;
    }
    
    public void broadcast(String json) {
        OutboundEvent.Builder builder = new OutboundEvent.Builder();
        OutboundEvent event = builder
            .mediaType(MediaType.APPLICATION_JSON_TYPE)
            .data(String.class, json)
            .build();
        broadcaster.broadcast(event);
    }
}

据我所知,任何版本的 Mule 都不支持服务器端事件。

另一种方法是使用 Mule 4 Websockets 连接器:https://docs.mulesoft.com/websockets-connector/1.0/

在任何情况下使用 Mule 3.9.0 都是不安全的。建议迁移到最新版本的Mule 4。