如何使用 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。
是否可以使用 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。