私の redis チャネルでの重複を避けるために、Redis セットにインデックスを保持することで、メッセージが既に存在するかどうかを確認しています。以下は私の実装です。ただし、例外を与えています。
redis.clients.jedis.exceptions.JedisDataException: Please close pipeline or multi block before calling this method.
at redis.clients.jedis.Response.get(Response.java:23)
これが実装です。
Jedis jedis = pool.getResource();
String id = message.getId();
Transaction transaction = jedis.multi();
redis.clients.jedis.Response<java.lang.Boolean> response = transaction.sismember(ID_SET_REDIS_KEY, id);
if (response != null && !response.get().booleanValue()) {
//add it to the
transaction.sadd(ID_SET_REDIS_KEY, id);
transaction.publish(redisChannelName, message);
}
transaction.exec();
pool.returnResource(jedis);
まったく同じメッセージを公開する可能性のある複数のパブリッシャーが存在するため、トランザクション内で get を実行する必要があります。