【发布时间】:2021-03-26 19:52:50
【问题描述】:
我喜欢用 quarkus 中 redis.subscribe 的响应做一个 SSE。
我有一个来自 quarkus-quickstart 的简单 SSE 示例
@GET
@Produces(MediaType.SERVER_SENT_EVENTS)
@SseElementType(MediaType.TEXT_PLAIN)
@Path("{name}/streaming")
public Multi<String> greeting(@org.jboss.resteasy.annotations.jaxrs.PathParam String name) {
return Multi.createFrom().publisher(vertx.periodicStream(2000).toMulti())
.map(l -> String.format("Hello %s! (%s)%n", name, new Date()));
}
效果很好,每 2 秒我都会在我的网络浏览器中收到 Hello ....
现在我尝试订阅 Redis,所以我应该会收到来自 Redis 的消息。
Redis 示例:
(cmd window 1)
SUBSCRIBE message-channel
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "message-channel"
3) (integer) 1
(cmd window 2)
PUBLISH message-channel HelloWorld
(integer) 1
(cmd window 1)
1) "message"
2) "message-channel"
3) "HelloWorld"
现在我用 quarkus SSE 试试这个:
@Inject
ReactiveRedisClient reactiveRedisClient;
@GET
@Produces(MediaType.SERVER_SENT_EVENTS)
@SseElementType(MediaType.TEXT_PLAIN)
@Path("sse/redissse")
public Multi<String> redissse() {
List<String> subscriberList = new ArrayList();
subscriberList.add("message-channel");
return reactiveRedisClient.subscribe(subscriberList)
.onItem().transformToMulti(keys -> Multi.createFrom().iterable(keys))
.onItem().castTo(String.class);
}
我收到的是一个例外:
WARNING [io.ver.red.cli.imp.RedisConnectionImpl] (vert.x-eventloop-thread-0) No handler waiting for message: [subscribe, message-channel, 1]
有人可以支持我吗? 有一个简单的例子吗? 我对此一无所知,我无法通过“订阅”发布接收 Redis 消息。
任何建议...
【问题讨论】:
标签: java redis publish-subscribe server-sent-events quarkus