web-dev-qa-db-ja.com

ERRのみ(P)SUBSCRIBE /(P)UNSUBSCRIBE / PING / QUITはこのコンテキストで許可されます

使ってます jdish.publish私のウェブアプリとjedis.subscribeデスクトップアプリで。したがって、両方が別々のアプリです。

このpubsubクラスがあります

public class RedisNewPostListener extends JedisPubSub {

    private final Jedis jedis;
    private final AppInstances appInstances;

    public RedisNewPostListener(AppInstances instances, Jedis jedis) {
        this.jedis = jedis;
        appInstances = instances;
    }

    @Override
    public void onMessage(String channel, String message) {
        String[] pos = message.split("##");
        double lat = Double.parseDouble(pos[0]);
        double lon = Double.parseDouble(pos[1]);

        List<GeoRadiusResponse> members = jedis.georadius("UsersByLocation", lon, lat, GEO_SEARCH_RANGE, GeoUnit.KM);

私はそれを次のように呼んでいます

RedisNewPostListener postListener = new RedisNewPostListener(instances, jedis);
jedis.subscribe(postListener, "NewPostArrived");

このエラーが発生します:

redis.clients.jedis.exceptions.JedisDataException: ERR only (P)SUBSCRIBE / (P)UNSUBSCRIBE / PING / QUIT allowed in this context
    at redis.clients.jedis.Protocol.processError(Protocol.Java:117)
    at redis.clients.jedis.Protocol.process(Protocol.Java:151)
    at redis.clients.jedis.Protocol.read(Protocol.Java:205)
    at redis.clients.jedis.Connection.readProtocolWithCheckingBroken(Connection.Java:297)
    at redis.clients.jedis.Connection.getRawObjectMultiBulkReply(Connection.Java:242)
    at redis.clients.jedis.Connection.getObjectMultiBulkReply(Connection.Java:248)
    at redis.clients.jedis.Jedis.georadius(Jedis.Java:3452)
    at com.app.redis.RedisNewPostListener.onMessage(RedisNewPostListener.Java:39)
    at redis.clients.jedis.JedisPubSub.process(JedisPubSub.Java:129)
    at redis.clients.jedis.JedisPubSub.proceed(JedisPubSub.Java:102)
    at redis.clients.jedis.Jedis.subscribe(Jedis.Java:2628)
15
manish

サブスクライブとパブリッシュに同じjedisクライアントを使用しているようです。別のクライアントを作成する必要があります。1つはサブスクライブ用で、もう1つは公開用です。

22
Conan Lee